DaemonSet方式部署nginx-ingress

gui.h發表於2023-02-05

前言

nginx-ingress是k8s官方維護的一個Ingress Controller,具體使用,官方有詳細的文件:https://kubernetes.github.io/ingress-nginx/deploy/

直接按照官方文件進行安裝,一般都會失敗,本文將幫助你成功安裝他。

官方的安裝方式

官方文件提供了兩種安裝方式,下面是直接複製過來的指令碼

  1. Helm
helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace
  1. 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工具。

解決映象拉取失敗

  1. 使用別人上傳好的映象替換
    可以從dockerhub倉庫先拉取別人上傳的映象,下載官方的YAML Manifest檔案,修改對應的映象。當然這種不安全。
  2. FQ拉取映象
  3. 拉取映象至私有倉庫
    將映象上傳到私有倉庫,然後進行方式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 安裝控制器幾乎相同的資源。

image.png

因為我的叢集環境中是不能FQ的,直接透過helm安裝是不行了,一般來說ingress很多是採用DaemonSet方式部署,官方的helm chatrs想必可以透過引數控制。

  1. 本地安裝helm安裝Helm

  2. 如果你本地環境可以FQ,則本地新增helm庫

本文為Gui.H原創文章,喜歡請關注公眾號 dotnet之美

helm repo add https://kubernetes.github.io/ingress-nginx
  1. 如果你不能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)

  1. 透過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
  1. 更換deploy.yaml清單中的映象
    在叢集中執行
kubectl apply -f deploy.yaml

結語

創作不易,如果本文對您有幫助,請動動手點個贊吧。

相關文章