前言
nginx-ingress
是k8s官方維護的一個Ingress Controller,具體使用,官方有詳細的文件:https://kubernetes.github.io/ingress-nginx/deploy/
直接按照官方文件進行安裝,一般都會失敗,本文將幫助你成功安裝他。
官方的安裝方式
官方文件提供了兩種安裝方式,下面是直接複製過來的指令碼
- Helm
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
- YAML Manifest
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/cloud/deploy.yaml
如果不FQ,這兩種方式均會失敗,又或許你個人電腦可以各種方式FQ,但公司的k8s叢集環境可不允許你使用FQ工具。
解決映象拉取失敗
- 使用別人上傳好的映象替換
可以從dockerhub
倉庫先拉取別人上傳的映象,下載官方的YAML Manifest
檔案,修改對應的映象。當然這種不安全。 - FQ拉取映象
略 - 拉取映象至私有倉庫
將映象上傳到私有倉庫,然後進行方式1的操作,如果你沒有FQ的環境,推薦使用這個開源專案拉取映象
https://github.com/anjia0532/gcr.io_mirror
DaemonSet 方式部署
透過上面的方式,雖然麻煩,但是一定可以解決你的問題,但官方的YAML Manifest
預設是以Deployment方式部署nginx-controller
,然後透過Loadbalancer
型別的Service
暴露出去,它將一直處於Pendding狀態,這時需要藉助開源的MetalLB
來直接可用的EXTERNAL-IP,這裡不再繼續折騰了,有興趣的可以按照官方的文件去解決:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/
網上搜到的
在網上找了一些如果以DaemonSet
方式部署nginx-ingress
的文字,有能用的,但是很不官方,也不優雅,基本就是下載YAML Manifest
檔案,進行手動修改,然後kubectl apply -f deploy.yaml
我推薦的
其實是官方推薦的,官方文件中關於YAML Manifest
方式部署方式下面有段提示:
The YAML manifest in the command above was generated with helm template,
so you will end up with almost the same resources as if you had used Helm to install the controller.
上述命令中的 YAML 清單是使用 helm template 生成的,因此您最終將獲得與使用 Helm 安裝控制器幾乎相同的資源。
因為我的叢集環境中是不能FQ的,直接透過helm
安裝是不行了,一般來說ingress很多是採用DaemonSet
方式部署,官方的helm chatrs
想必可以透過引數控制。
-
本地安裝
helm
:安裝Helm -
如果你本地環境可以FQ,則本地新增helm庫
本文為Gui.H原創文章,喜歡請關注公眾號 dotnet之美
helm repo add https://kubernetes.github.io/ingress-nginx
- 如果你不能FQ
想辦法將這個下載這個charts
[ingress-nginx/charts/ingress-nginx at main · kubernetes/ingress-nginx (github.com)](https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx)
- 透過
helm template
生成Manifest清單
helm template --set controller.kind=DaemonSet --set controller.hostPort.enabled=true --set controller.service.enabled=false --namespace ingress-nginx ingress ingress-nginx/ingress-nginx > ./deploy.yaml
- 更換
deploy.yaml
清單中的映象
在叢集中執行
kubectl apply -f deploy.yaml
結語
創作不易,如果本文對您有幫助,請動動手點個贊吧。