--- title: 协议选择 description: 关于怎么声明协议的信息。 weight: 10 keywords: [protocol,protocol sniffing,protocol selection,protocol detection] aliases: - /zh/help/ops/traffic-management/protocol-selection - /zh/help/ops/protocol-selection - /zh/help/tasks/traffic-management/protocol-selection - /zh/docs/ops/traffic-management/protocol-selection --- Istio 默认支持代理所有 TCP 流量,但为了提供附加的能力,比如路由和丰富的指标,使用什么协议必须被确定。协议可以被自动检测或者明确的声明确定。 ## 手动协议选择{#manual-protocol-selection} 通过声明一个 Service 端口,协议可以被手动指定 `name: [-]`。 下列协议是被支持的: - `grpc` - `grpc-web` - `http` - `http2` - `https` - `mongo` - `mysql`\* - `redis`\* - `tcp` - `tls` - `udp` \* 这些协议默认被禁用以阻止偶然地产生试验性的特性。 要启用他们,请配置相应的 Pilot [环境变量](/zh/docs/reference/commands/pilot-discovery/#envvars)。 下面是一个 Service 例子,它定义了一个 `mysql` 端口 和一个 `http` 端口: {{< text yaml >}} kind: Service metadata: name: myservice spec: ports: - number: 3306 name: mysql - number: 80 name: http-web {{< /text >}} ## 自动协议选择{#automatic-protocol-selection} Istio 可以自动检测出 HTTP 和 HTTP/2 流量。如果协议无法自动确定,流量将会被当作普通 TCP 流量对待。 这个特性是默认开启的。通过设置这些安装选项可以将其关闭: - `--set values.pilot.enableProtocolSniffingForOutbound=false` 为(非指定的或不支持协议的)出站监听器禁用协议检测。 - `--set values.pilot.enableProtocolSniffingForInbound=false` 为(非指定的或不支持协议的)入站监听器禁用协议检测。