Kubernetes CKA課程筆記 38
接著我們將聚焦在Ingress Controller如何轉拋請求給後面應用程式的Service
在此我們將定義Ingress Component來定義routing logic
Ingress將會把請求轉拋給nginx-service
首先我們得先改造之前的nginx-service,先將其刪除:
編輯修改一下之前的nginx-service.yaml內容:
重建nginx-service為ClusterIP:
所以之後讓Ingress來處理外部的請求,不讓應用程式的Service暴露到Node外
接著透過kubectl指令來產生default的Ingress Configuration File:
先看看建立Ingress元件該如何下,執行:
kubectl create ingress --help
看到以下:
所以相對應的dry-run產生yaml檔指令為:
kubectl create ingress {名稱} --rule=host/path=service:port --dry-run=client -o yaml > {名稱}.yaml
實際執行取名my-app-ingress並執行如下:
原始看到內容會是如下,並改造:
上面的pathType會有兩種選擇:
- Exact:完全吻合的URL轉拋(有看大小寫)
- 前綴字有對應即可(如下官網的範例)
接著執行建立:
這邊講師在建立的時候其實會有錯誤,可能舊版固定的問題
建立失敗的訊息關鍵字大概是:
Internal error occurred: failed calling webhook “validate.nginx.ingress.kubernetes.io”後面balbalbal連到20.107.2.225失敗啥的no route to host
主因是Service其中的ingress-nginx-controller-admission
無法被建立的ingress連接造成建立ingress失敗!
來到官方github可以找到以下片段客製化的部分(跟這個有關)
可執行以下指令看到部分內容:
kubectl get ValidatingWebhookConfiguration
實際內容這邊不細談
如果建立有問題則要執行修改:
kubectl edit ValidatingWebhookConfiguration
然後儲存離開即可(不過因為我建立沒有錯誤,所以我沒修改!)
如果有改OK,就在重新apply建立ingress元件
這邊特別提醒
ingress元件(負責定義轉繞給內部Service)
是有限定namespace同內部service的!!
如上我們暫時定義在default namespace
此時理應AWS的DNS可以正常轉址請求到內部Pod了:
我查看ingress controller pod log:
kubectl logs {ingress controller pod名稱}
ingress does not contain a valid IngressClass
這邊找到一些網路偏方:
以下是隔天重啟worker後確認狀態:
kubectl logs {ingress controller pod}
比對前一篇筆記,我有紀錄透過helm安裝ingress-controller
在最後結尾其實有給ingress元件的configuration file範本:
所以在ingress的Manifests內編輯
再回頭看看ingress-controller pod的log:
結果真的OK了!!
也就是照著當初helm安裝完給的ingress範例是可以正常建立ingress元件的
(到這邊我有使用的講師說的那個ValidatingWebhookConfiguration
的設定也有更改到)
設定Multiple Paths:
- 我們可以透過在相同的AWS LB的DNS上
- 透過不同Path指向到不同的內部Service
- 以下嘗試增加ingress的path設定如下
移除並重建ingress,並透過以下指令查看新建的ingress rules:
kubectl describe ingress {ingress-name}
過幾分鐘後才生效導址出現:
接著嘗試後面接剛剛加的path => /my-app
還是一樣404...
這是因為:
- 打進nginx-service:8080後又帶著/my-app這個path
- 但是內部service背後nginx Pod並沒有定義/my-app的url服務對應
所以要在改寫ingress的規則
參考k8s的官方github:
改好後重建:
講師額外筆記建議:
如上我們僅建立出1個ingress-controller pod
但是建議正式環境下多少worker node就建立多少個ingress-controller pod
我有看到helm安裝的ingress-controller是有deployment的:
所以是可以透過筆記27的scale指令來調整數量
目前是看到可以到以下路徑找到helm拉下來的tgz檔
相關的helm安裝如何調整,待之後研究
並且ingress內也能見多個rule,甚至每個service都建各自的ingress元件