How to create custom istio ingress gateway controller?

后端 未结 5 1527
醉酒成梦
醉酒成梦 2020-12-13 16:46

Our GKE cluster is shared to multiple teams in company. Each team can have different public domain (and hence want to have different CA cert setup and also different ingress

5条回答
  •  旧巷少年郎
    2020-12-13 16:53

    Okay, I found the answer after looking at the code of Istio installation via helm. So, basically the istio have an official way (but not really documented in their readme.md file) to add additional gateway (ingress and egress gateway). I know that because I found this yaml file in their github repo and read the comment (also looking at the gateway chart template code for the spec and its logic).

    So, I solved this by, for example, defining this values-custom-gateway.yaml file:

    # Gateways Configuration
    # By default (if enabled) a pair of Ingress and Egress Gateways will be created for the mesh.
    # You can add more gateways in addition to the defaults but make sure those are uniquely named
    # and that NodePorts are not conflicting.
    # Disable specifc gateway by setting the `enabled` to false.
    #
    gateways:
      enabled: true
    
      agung-ingressgateway:
        namespace: agung-ns
        enabled: true
        labels:
          app: agung-istio-ingressgateway
          istio: agung-ingressgateway
        replicaCount: 1
        autoscaleMin: 1
        autoscaleMax: 2
        resources: {}
          # limits:
          #  cpu: 100m
          #  memory: 128Mi
          #requests:
          #  cpu: 1800m
          #  memory: 256Mi
    
        loadBalancerIP: ""
        serviceAnnotations: {}
        type: LoadBalancer #change to NodePort, ClusterIP or LoadBalancer if need be
    
        ports:
          ## You can add custom gateway ports
        - port: 80
          targetPort: 80
          name: http2
          # nodePort: 31380
        - port: 443
          name: https
          # nodePort: 31390
        - port: 31400
          name: tcp
        secretVolumes:
        - name: ingressgateway-certs
          secretName: istio-ingressgateway-certs
          mountPath: /etc/istio/ingressgateway-certs
        - name: ingressgateway-ca-certs
          secretName: istio-ingressgateway-ca-certs
          mountPath: /etc/istio/ingressgateway-ca-certs
    

    If you take a look at yaml file above, I specified the namespace other than istio-system ns. In this case, we can have a way to customize the TLS and ca cert being used by our custom gateway. Also the agung-ingressgateway as the holder of the custom gateway controller spec is used as the gateway controller's name.

    Then, i just install the istio via helm upgrade --install so that helm can intelligently upgrade the istio with additional gateway.

    helm upgrade my-istio-release-name  --install
    

    Once it upgrades successfully, I can specify custom selector to my Gateway:

    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: agung-gateway
      namespace: agung-ns
    spec:
      selector:
        app: agung-istio-ingressgateway # use custom gateway
        # istio: ingressgateway # use Istio default gateway implementation
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
          privateKey: /etc/istio/ingressgateway-certs/tls.key
        hosts:
        - "*"
    

提交回复
热议问题