Google Code Prettify

2020年4月14日 星期二

K8s: Ingress

繼續前面「K8s: Service」的例子,建立好服務後,服務會有對內的 cluster IP 及對外的 external IP,這樣對外服務是沒有問題了,但是,一個 Kubernetes 裡會有無數個服務,外部系統要使用這些服務有沒有類似 API Gateway 的功能呢? Kubernetes 提供的解答是 Ingress ! 它就是提供了一些基本功能的 API Gateway。
如上圖,Ingress 會根據網址導向不同的 service,以「K8s: Service」的例子,這裡寫了如下的 yaml 檔來產生 Ingress。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: steven-gw
spec:
  rules:
  - host: steven-gw.steven.idv.tw
    http:
      paths:
      - path: /host/info
        backend:
          serviceName: host-http
          servicePort: 9090
  1. 第 4 行定義了 Ingress 的名稱
  2. 第 7 行定義當 Ingress 收到這個網址的 request,會將 request 以下面的規則導向服務。
  3. 第 10 行定義,當網址開頭為 /host/info 導向 host-http 服務,port 為 9090,這是上一篇創建服務時,服務提供出來的 port。
執行上面的 yaml 後,用如下指令看一下 Ingress 綁定到那一個 IP:
kubectl get ingresses
應該會出現如下結果:
有了 IP 後,就可以在 DNS 裡設定 steven-gw.steven.idv.tw 指向該 IP,或是在 /etc/hosts 中設定,接下來就可以用如下指令測試看看。
curl http://steven-gw.steven.idv.tw/host/info
【番外篇】
上面是在 VMware PKS 上測試,PKS 上有預設安裝了 Ingress Controller,所以 ADDRESS 欄會有 IP,如果是自行安裝的 Kubernetes Cluster,因為 K8s 只提供 Ingress API 的定義,實作要再另外安裝,目前比較常見的有三種選擇:
  1. Nginx Kubernetes
  2. F5 BIG-IP Controller
  3. Ingress Kong
底下是 Ingress Kong 的安裝指令。
$ helm repo add kong https://charts.konghq.com
$ helm repo update
$ helm install kong/kong --generate-name --set ingressController.installCRDs=false

沒有留言:

張貼留言