了解 K8s 中的大門神!Ingress
了解 K8s 中的大門神!Ingress

了解 K8s 中的大門神!Ingress

Tags
Kubernetes
ithome 2020 ironman
Date
Oct 3, 2020
本文章同時發佈於:
文章為自己的經驗與夥伴整理的內容,設計沒有標準答案,如有可以改進的地方,請告訴我,我會盡我所能的修改,謝謝大家~

大家好,今天我們要介紹 K8s 的另一個重要元件Ingress,Ingress 是一個在 K8s 眾多 Service 前的 Reverse Proxy,他可以讓 K8s 的連線變為:
一個 domain,由不同的 hostName 或 pathName 來連線
notion image
如圖舉個例子,如果我們只有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/v1beta1kind: Ingressmetadata: name: digimon-ingressspec: 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

參考