Protocol Selection

Istio supports proxying all TCP traffic by default, but in order to provide additional capabilities, such as routing and rich metrics, the protocol must be determined. This can be done automatically or explicitly specified.

Manual protocol selection

Protocols can be specified manually by naming the Service port name: <protocol>[-<suffix>]. The following protocols are supported:

  • grpc
  • grpc-web
  • http
  • http2
  • https
  • mongo
  • mysql*
  • redis*
  • tcp
  • tls
  • udp

* These protocols are disabled by default to avoid accidentally enabling experimental features. To enable them, configure the corresponding Pilot environment variables.

Below is an example of a Service that defines a mysql port and an http port:

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - number: 3306
    name: mysql
  - number: 80
    name: http-web

Automatic protocol selection (experimental)

Istio can automatically detect HTTP and HTTP/2 traffic. If the protocol cannot automatically be determined, traffic will be treated as plain TCP traffic.

This feature is experimental and on for outbound traffic, off for inbound traffic by default. It can be turned on for inbound traffic by providing the install options --set values.pilot.enableProtocolSniffingForInbound=true or turned off for outbound traffic by providing the install options --set values.pilot.enableProtocolSniffingForOutbound=false.

Was this information useful?
Do you have any suggestions for improvement?

Thanks for your feedback!