ingress-nginx-controller安装
ingress-nginx-controller安装
ingress-nginx-controller是配置ingress发布的基础。以下主要采用Helm安装。地址:
GitHub - kubernetes/ingress-nginx: Ingress NGINX Controller for Kubernetes
1 Helm安装
安装不难,需要找到合适的压缩包就行。我自己的安装过程忘了,以下为其他人的安装过程。高版本更加适配高版本。
# 下载
wget https://get.helm.sh/helm-v3.10.0-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.10.0-linux-amd64.tar.gz
# 将解压目录下的 helm 程序移动到 usr/local/bin/helm,先进入到解压目录后拷贝
cp helm /usr/local/bin/
# 查看版本 验证是否成功
helm version
# version.BuildInfo{Version:"v3.10.0", ........}
2 下载ingress-nginx
# 安装对应的helm仓库(注意:以下灵感为国内仓库,但是根据失败经验而谈,还是github上的版本更加合适。如下:)
helm repo add azure http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun http://mirror.kaiyuanshe.cn/kubernetes/charts/
# 以下添加的为ingress-nginx的仓库。通常,每个项目都会有自己的 Helm 仓库 URL。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# 查看版本
[root@k8s-master ingress-nginx]# helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts
bitnami https://charts.bitnami.com/bitnami
ingress-nginx https://kubernetes.github.io/ingress-nginx
# 在仓库搜索到自己想要的版本。helm search repo ingress-nginx。但是我比较懒,直接下载了最新的。
# 下载
helm fetch ingress-nginx/ingress-nginx
#解压缩
tar -zxvf ingress-nginx-4.12.0.tgz
cd ingress-nginx
[root@k8s-master ingress-nginx]# ls
changelog Chart.yaml ci OWNERS README.md README.md.gotmpl templates tests values.yaml
3 修改配置文件(最重要的)
[root@k8s-master ingress-nginx]# vim values.yaml
# 具体修改的地方全部列出来了。
#第一处,修改仓库名称和镜像名称,经过测试,registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.12.0可以成功使用。
#这里特别注意有一个前提,如果是在集群中部署项目使用ingress-nginx,需要提前在工作节点下载docker或者containerd,手动拉取从而测试该仓库和镜像是否可用,手动拉取的命令是[root@k8s-node1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.12.0
。一定要记住。
#继续修改,对以下这段还需要注释digest
controller:
name: controller
enableAnnotationValidations: true
image:
## Keep false as default for now!
chroot: false
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/nginx-ingress-controller
## for backwards compatibility consider setting the full image url via the repository value below
## use *either* current default registry/image or repository format or installing chart by providing the values.yaml will fail
## repository:
tag: "v1.12.0"
#digest: sha256:e6b8de175acda6ca913891f0f727bca4527e797d52688cbe9fec9040d6f6b6fa
#digestChroot: sha256:87c88e1c38a6c8d4483c8f70b69e2cca49853bb3ec3124b9b1be648edf139af3
pullPolicy: IfNotPresent
runAsNonRoot: true
# 第二处修改:同样修改仓库和镜像名称,以及注释digest
readOnlyRootFilesystem: true
resources: {}
patch:
enabled: true
image:
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/kube-webhook-certgen
## for backwards compatibility consider setting the full image url via the repository value below
## use *either* current default registry/image or repository format or installing chart by providing the values.yaml will fail
## repository:
tag: v1.5.0
#digest: sha256:aaafd456bda110628b2d4ca6296f38731a3aaf0bf7581efae824a41c770a8fc4
pullPolicy: IfNotPresent
# -- Provide a priority class name to the webhook patching job
##
priorityClassName: ""
# 第三处都是一些小的修改:
# false 改成 true
hostNetwork: true
# 第四处
# ClusterFirst 改成
dnsPolicy: ClusterFirstWithHostNet
# 第5处添加标签。记得在节点上打上标签。kubectl label node k8s-node1 ingress=true
nodeSelector:
kubernetes.io/os: linux
# 增加
ingress: "true"
# 第6处
# -- Use a `DaemonSet` or `Deployment`
# Deployment 改成 DaemonSet
kind: DaemonSet
# 第7处,enabled要改为false
admissionWebhooks:
name: admission
annotations: {}
# ignore-check.kube-linter.io/no-read-only-rootfs: "This deployment needs write access to root filesystem".
## Additional annotations to the admission webhooks.
## These annotations will be added to the ValidatingWebhookConfiguration and
## the Jobs Spec of the admission webhooks.
enabled: false
# 第8处,找到controller.service.type,修改为NodePort,这是由于要向外部暴露服务。该type的缩进在controller.service下,一定要找到正确的进行修改。
controller service.
annotations: {}
# -- Labels to be added to both controller services.
labels: {}
# -- Type of the external controller service.
# Ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
type: NodePort
# 第9处。修改registry为自己的设置,而不是官方的k8s,否则会出现拉取镜像时,镜像拉取仓库改不过来的情况。
## Ref: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/index.md
##
global:
image:
# -- Registry host to pull images from.
registry: registry.cn-hangzhou.aliyuncs.com
## Overrides for generated resource names
# See templates/_helpers.tpl
4 安装
# 给ingress-nginx 创建独有的命名空间
kubectl create ns ingress-nginx
# 给master节点,添加标签ingress=true
kubectl label node k8s-master ingress=true
# 安装ingress-nginx,后面的“.”,表示从当前目录开始安装,查找配置文件
helm install ingress-nginx -n ingress-nginx .
如果安装成功的话,会出现一串信息。也可以执行以下命令,出现以下状态,才是安装成功。
[root@k8s-master java-web-demo]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-ddz9m 1/1 Running 0 16m
ingress-nginx-controller-wrh4l 1/1 Running 0 16m
5 注意
1、如果安装成功,出现一串信息,但是kubectl get pods -n ingress-nginx该命令下状态有异常的话。
执行kubectl describe pod 有异常的ingress-nginx名称 -n ingress-nginx
查看日志,一般都是镜像拉取失败和健康检查不过关的问题。
镜像拉取失败分两种
-
拉取仓库没有改变,还是官方仓库。这一处的问题一般是关于kube-webhook-certgen拉取不到。
这种在修改配置文件的时候提到,需要更改第9处。
-
镜像拉取不到
这种可以尝试手动拉取在节点上和更换仓库。
手动拉取的命令:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.1
健康检查不过关需要增加时间,官方健康检查太过于严格了。
2、真的出现上述异常但是按照上述方式修改了之后,可以执行以下命令更新。
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
> --namespace ingress-nginx \
> --values ./values.yaml
3、不过我的建议是卸载重装,避免有缓存。
helm uninstall ingress-nginx -n ingress-nginx
helm install ingress-nginx -n ingress-nginx .