流量管理的常见问题

怎样查看在 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 的请求。

  1. $ kubectl create -f - <<EOF
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. name: simple-ingress
  6. annotations:
  7. kubernetes.io/ingress.class: istio
  8. spec:
  9. rules:
  10. - host: example.com
  11. http:
  12. paths:
  13. - path: /helloworld
  14. backend:
  15. serviceName: myservice
  16. servicePort: grpc
  17. EOF

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

  1. $ kubectl create -f - <<EOF
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. name: this-will-not-work
  6. annotations:
  7. kubernetes.io/ingress.class: istio
  8. # Ingress annotations other than ingress class will not be honored
  9. ingress.kubernetes.io/rewrite-target: /
  10. spec:
  11. rules:
  12. - host: example.com
  13. http:
  14. paths:
  15. - path: /hello(.*?)world/
  16. backend:
  17. serviceName: myservice
  18. servicePort: grpc
  19. EOF
Istio 支持哪些协议?

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

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