了解 K8s 中的大門神!Ingress

本文章同時發佈於:

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

大家好,今天我們要介紹 K8s 的另一個重要元件Ingress,Ingress 是一個在 K8s 眾多 Service 前的 Reverse Proxy,他可以讓 K8s 的連線變為:

一個 domain,由不同的 hostName 或 pathName 來連線

圖片來源: Kubernetes 基礎教學(二)實作範例:Pod、Service、Deployment、Ingress

如圖舉個例子,如果我們只有digimon.com一個 domain,卻有 a, b, c, d, e 5 個 service 怎麼辦?

  • hostName 的分流做法: 設置子網域 a.digimon.com, b.digimon.com … 等等
  • pathName 的分流做法: 設置路徑 digimon.com/a, digimon.com/b … 等等

這樣就不用另外再去申請 domain 了!(當然如果你很有錢也可以啦 XD)

實作

Ingress 有許多不同環境的版本,ingress-gce, ingress-aws, ingress-nginx 等等(詳細在additional-controllers),如果是使用 ingress-aws,他在實際套用時會直接與 AWS 的 Load Balancer 做連動,而我們在 local 直接使用預設的即可。

以下是以 pathName 來做分流,

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: digimon-ingress
spec:
  rules:
    - host: digimon.com
      http:
        paths:
          - path: /digimon-service
            backend:
              serviceName: envoy
              servicePort: 8080
  • rules.host: 設置實際上連線的 domain
  • rules.http.paths.path: 設置分流 path,在此會以digimon.com/digimon-service來導到正確的 envoy-service
  • rules.http.paths.backend.serviceName: 要導到的 service name
  • rules.http.paths.backend.servicePort: 要導到的 service port

由於我使用上發現 ingress 要啟用要使用 hyperkit,所以可以先刪除 minikube 在重新建立,

$ minikube delete
$ minikube start --driver=hyperkit --kubernetes-version v1.15.0

啟用 ingress

minikube addons enable ingress

啟動 service, deployment, ingress

$ kompose up
$ kubectl create -f ingress.yaml

獲取 minikube ip

$ minikube ip

由於 domain 並不真的存在,所以我們可以以修改/etc/hosts的方式,來將 domain 導到 minikube ip

我得到的 minikube ip 是127.0.0.1,因此我可以下此指令將 domain.com 導到 127.0.0.1

echo 127.0.0.1   digimon.com  >> /etc/hosts

//: #“yorktodo envoy 要在最後啟動這個問題需要解決” //: #“yorktodokubectl create -f db-deployment.yaml,db-service.yaml,envoy-deployment.yaml,envoy-service.yaml,server-deployment.yaml,server-service.yaml,weather-deployment.yaml,weather-service.yaml,web-deployment.yaml,web-service.yaml//: #“yorktodo 修改文章 etc/host 為 192.168.64.7 api.backend.com”

參考

comments powered by Disqus