FAQ

  • 如何查看当前已经通过Istio配置好的规则?

    使用istioctl get routerules -o yamlkubectl get routerules -o yaml可以查看规则。

  • 我创建了一个权重路由规则,想把流量分配到某个服务的两个版本上,但无法看到预期行为。

    对于目前的Envoy sidecar实现,100次以上的请求才可能是能被观测到的理想分布。

  • 创建路由规则后为什么部分服务不可用了?

    这是目前Envoy sidecar实现的一个已知问题。在创建规则2秒以后,服务就应当可用。

  • 可以不设置路由规则直接使用标准Ingress规格吗?

    主机、TLS和基于扩展路径匹配的简单ingress规格,都可以开箱即用,而无需路由规则。但需要注意的是,ingress资源所用的路径不能包含.字符。

    举个例子,下列ingress资源匹配example.com主机上的/helloworld请求。

    1. cat <<EOF | kubectl create -f -
    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

    但是下列规则并不能工作,因为在路径中使用了正则表达式,并使用了ingress.kubernetes.io注释。

    1. cat <<EOF | kubectl create -f -
    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