iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 23
1
Modern Web

被選召的 Gopher 們,從零開始探索 Golang, Istio, K8s 數碼微服務世界系列 第 23

DAY23 - Istio Gateway、VirtualService元件 - 實作篇

本文章同時發佈於:

文章為自己的經驗與夥伴整理的內容,設計沒有標準答案,如有可以改進的地方,請告訴我,我會盡我所能的修改,謝謝大家~

大家好。今天要介紹 Istio 的VirtualServiceGateway,兩者搭配可以達到 K8s 的Ingress的效果,並且有著 Istio 更強大的功能。

而這篇文章會以實作為介紹,實際原理將在之後介紹,

實作

helm-digimon/templates/server-service.yaml中,我們須對 ports 做修改,以提供 envoy proxy 要代理的資訊,詳細文件在此

新增VirtualServiceGateway兩個元件至helm-digimon/templates/gateway.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: api-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: virtual-service
spec:
  hosts:
    - "api.backend.com"
  gateways:
    - api-gateway
  http:
    - match:
        - uri:
            prefix: /digimon.Digimon
      route:
        - destination:
            port:
              number: 6000
            host: server
      corsPolicy:
        allowOrigins:
          - exact: "http://web.backend.com"
        allowMethods:
          - POST
          - GET
          - OPTIONS
          - PUT
          - DELETE
        allowHeaders:
          - grpc-timeout
          - content-type
          - keep-alive
          - user-agent
          - cache-control
          - content-type
          - content-transfer-encoding
          - x-accept-content-transfer-encoding
          - x-accept-response-streaming
          - x-user-agent
          - x-grpc-web
        maxAge: 1728s
        exposeHeaders:
          - grpc-status
          - grpc-message
        allowCredentials: true
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: web-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: web
spec:
  hosts:
    - "web.backend.com"
  gateways:
    - web-gateway
  http:
    - match:
        - uri:
            prefix: /
      rewrite:
        uri: /
      route:
        - destination:
            port:
              number: 8060
            host: web

將 K8s run 起來

$ minikube start --driver=hyperkit --kubernetes-version v1.16.0
$ istioctl install --set profile=demo
$ kubectl label namespace default istio-injection=enabled
$ minikube tunnel
$ kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
$ open /etc/hosts
$ helm install . --generate-name
$ kubectl get all

參考


上一篇
DAY22 - Istio 是什麼,原來是容器間通訊的妻管嚴嗎!? - 實作篇
下一篇
DAY24 - Istio Gateway、VirtualService元件 - 概念篇
系列文
被選召的 Gopher 們,從零開始探索 Golang, Istio, K8s 數碼微服務世界30

尚未有邦友留言

立即登入留言