流量管理的常见问题
怎样查看在 Istio 中已配置的当前路由规则?
可以使用这个命令查看 kubectl get virtualservice -o yaml
Sidecar 代理在哪些端口上截获入站流量?
Istio 默认截获所有端口的入站流量。
您可以通过 traffic.sidecar.istio.io/includeInboundPorts
这个 pod 注解指定一组端口来截获流量,或通过 traffic.sidecar.istio.io/excludeOutboundPorts
指定一组端口来放行流量,以更改这种默认行为。
MUTUAL 和 ISTIO_MUTUAL TLS 模式有什么区别?
两个 DestinationRule
设置都会发送双向的 TLS 流量。
使用ISTIO_MUTUAL
时,将会自动使用 Istio 证书。
对于MUTUAL
,必须配置密钥、证书和可信任的CA。
允许与非 non-Istio 应用启动双向的 TLS。
我可以不配置任何路由规则,使用 Ingress 的标准配置吗?
简单的 Ingress
规范,提供了开箱即用,通过 Host
,TLS
以及基本 Path
精确匹配就可以使用,无需配置路由规则。
然而,Path
在使用 Ingress
资源时不应该有任何 .
字符。
比如,下面 Ingress
的资源匹配 Host
为 example.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 还为其他协议(如 http
和 mysql
)提供路由和指标等功能。
对于所有协议列表以及协议配置信息,请查看文档协议选择 。