将K8s Ingress与Istio网关一起使用?

时间:2019-01-21 20:13:13

标签: istio

在头盔值文件中,有一个带有说明的设置global.k8sIngressSelector。

  

用于传统k8s入口资源的网关。默认情况下是   使用'istio:ingress'来匹配0.8配置。它要求   ingress.enabled设置为true。你也可以设置   到入口网关或您在“网关”中定义的任何其他网关   部分。

我对此的解释是,istio入口应该选择正常的入口配置,而不必提供虚拟服务。它是否正确?我尝试过,但对我不起作用。

kind: Deployment
apiVersion: apps/v1
metadata:
  name: echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
        - name: echo
          image: mendhak/http-https-echo
          ports:
            - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: echo
spec:
  type: ClusterIP
  selector:
    app: echo
  ports:
    - port: 80
      name: http

这有效

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - '*.dev.example.com'
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: echo
spec:
  hosts:
    - echo.dev.example.com
  gateways:
    - gateway
  http:
    - route:
        - destination:
            host: echo

这不是

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: echo
spec:
  rules:
    - host: echo.dev.example.com
      http:
        paths:
          - backend:
              serviceName: echo
              servicePort: 80

1 个答案:

答案 0 :(得分:2)

您的Ingress需要具有注释:kubernetes.io/ingress.class: istio

根据您使用的Istio版本,它可能始终无法工作。当前存在一个开放的问题,即Ingress无法在最新的驱动程序中运行,听起来好像已经被破解了一段时间。

https://github.com/istio/istio/issues/10500