流量管理的常见问题

怎样查看在 Istio 中已配置的当前路由规则?

可以使用这个命令查看 kubectl get virtualservice -o yaml

Sidecar 代理在哪些端口上截获入站流量?

Istio 默认截获所有端口的入站流量。 您可以通过 traffic.sidecar.istio.io/includeInboundPorts 这个 pod 注解指定一组端口来截获流量,或通过 traffic.sidecar.istio.io/excludeOutboundPorts 指定一组端口来放行流量,以更改这种默认行为。

我可以不配置任何路由规则,使用 Ingress 的标准配置吗?

简单的 Ingress 规范,提供了开箱即用,通过 Host,TLS 以及基本 Path 精确匹配就可以使用,无需配置路由规则。 然而,Path 在使用 Ingress 资源时不应该有任何 . 字符。

比如,下面 Ingress 的资源匹配 Hostexample.com 以及 URL/helloworld 的请求。

$ kubectl create -f - <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: simple-ingress
annotations:
  kubernetes.io/ingress.class: istio
spec:
rules:
- host: example.com
  http:
    paths:
    - path: /helloworld
      backend:
        serviceName: myservice
        servicePort: grpc
EOF

然而,这下面的规则将不工作,因为他们在 Path 中使用了匹配表达式,并且添加了 ingress.kubernetes.io 注解。

$ kubectl create -f - <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: this-will-not-work
annotations:
  kubernetes.io/ingress.class: istio
  # Ingress annotations other than ingress class will not be honored
  ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
  http:
    paths:
    - path: /hello(.*?)world/
      backend:
        serviceName: myservice
        servicePort: grpc
EOF
Istio 支持哪些协议?

目前,Istio 支持基于 TCP 的协议。此外,Istio 还为其他协议(如 httpmysql)提供路由和指标等功能。

对于所有协议列表以及协议配置信息,请查看文档协议选择