K8s安装ingress-nginx
安装ingress-nginx
问题
-
ingress-nginx-controller的service 通过NodePort显露出去时,需要先使用ingree-controller调度到的节点先访问一次,集群的其他节点才能正常访问, 如: 有 master:10.191.9.21,node1:10.191.9.22,node2:10.191.9.23 三个节点,ingress-controller 调度到了节点node2 ingress的host为 kube.local.net ,当集群所有对象都看着正常时,需要把 kube.local.net 的IP先解析到node2:10.191.9.23 先访问一次,然后才可以把IP解析到其他两个节点也能正常访问,否则访问失败
-
下载镜像失败问题
-
找到yaml文件中的镜像地址
image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.3.0@sha256:549e71a6ca248c5abd51cdb73dbc3083df62cf92ed5e6147c780e30f7e007a47 image: registry.k8s.io/ingress-nginx/controller:v1.3.1@sha256:54f7fe2c6c5a9db9a0ebf1131797109bb7a4d91f56b9b362bde2abd237dd1974
-
参照镜像代理内解决步骤一步步下载镜像
-
把yaml文件中镜像的hash码后缀去掉 @及其后面的部门
-
-
ingress无法访问问题
把ingress域名指向ingress控制器服务所调度到的宿主机IP
-
添加defaultBackend
此问题不会影响ingress的正常访问,但是不确定是否会有其他影响,所以还是选择修复它
# 在ingress的yaml中,需要添加defaultBackend,不然它会显示无法找到默认后台的错误 Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
准备
选择安装方式
根据官方文档选择安装的方式,出于学习的目的,我选择的是第二种YAML manifests.
选择版本
Supported | Ingress-NGINX version | k8s supported version | Alpine Version | Nginx Version | Helm Chart Version |
---|---|---|---|---|---|
🔄 | v1.12.0-beta.0 | 1.31, 1.30, 1.29, 1.28 | 3.20.3 | 1.25.5 | 4.12.0-beta.0 |
🔄 | v1.11.3 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.3 | 1.25.5 | 4.11.3 |
🔄 | v1.11.2 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.0 | 1.25.5 | 4.11.2 |
🔄 | v1.11.1 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.0 | 1.25.5 | 4.11.1 |
🔄 | v1.11.0 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.0 | 1.25.5 | 4.11.0 |
v1.10.5 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.3 | 1.25.5 | 4.10.5 | |
v1.10.4 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.0 | 1.25.5 | 4.10.4 | |
v1.10.3 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.0 | 1.25.5 | 4.10.3 | |
v1.10.2 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.20.0 | 1.25.5 | 4.10.2 | |
v1.10.1 | 1.30, 1.29, 1.28, 1.27, 1.26 | 3.19.1 | 1.25.3 | 4.10.1 | |
v1.10.0 | 1.29, 1.28, 1.27, 1.26 | 3.19.1 | 1.25.3 | 4.10.0 | |
v1.9.6 | 1.29, 1.28, 1.27, 1.26, 1.25 | 3.19.0 | 1.21.6 | 4.9.1 | |
v1.9.5 | 1.28, 1.27, 1.26, 1.25 | 3.18.4 | 1.21.6 | 4.9.0 | |
v1.9.4 | 1.28, 1.27, 1.26, 1.25 | 3.18.4 | 1.21.6 | 4.8.3 | |
v1.9.3 | 1.28, 1.27, 1.26, 1.25 | 3.18.4 | 1.21.6 | 4.8.* | |
v1.9.1 | 1.28, 1.27, 1.26, 1.25 | 3.18.4 | 1.21.6 | 4.8.* | |
v1.9.0 | 1.28, 1.27, 1.26, 1.25 | 3.18.2 | 1.21.6 | 4.8.* | |
v1.8.4 | 1.27, 1.26, 1.25, 1.24 | 3.18.2 | 1.21.6 | 4.7.* | |
v1.7.1 | 1.27, 1.26, 1.25, 1.24 | 3.17.2 | 1.21.6 | 4.6.* | |
v1.6.4 | 1.26, 1.25, 1.24, 1.23 | 3.17.0 | 1.21.6 | 4.5.* | |
v1.5.1 | 1.25, 1.24, 1.23 | 3.16.2 | 1.21.6 | 4.4.* | |
v1.4.0 | 1.25, 1.24, 1.23, 1.22 | 3.16.2 | 1.19.10† | 4.3.0 | |
v1.3.1 | 1.24, 1.23, 1.22, 1.21, 1.20 | 3.16.2 | 1.19.10† | 4.2.5 |
下载yaml
从下载地址中获取完整的yaml,并命名为ingress-controller.yaml
下载镜像
参考问题2下载镜像和修改ingress-controller.yaml中的镜像地址
修改ingress服务暴露到集群外方式
找到ingress-controller.yaml中名称为ingress-nginx-controller的Service类型资源定义,并把它的type修改为NodePort
ports:
- appProtocol: http
name: http
nodePort: 30164
port: 80
protocol: TCP
targetPort: http
- appProtocol: https
name: https
nodePort: 31970
port: 443
protocol: TCP
targetPort: https
安装后的修改方式
# 把现有的service yaml导出来
kubectl -n ingress-nginx get service -o yaml > ingress-service-now.yaml
# 按照上面的方式修改一下重新 apply
kubectl apply -f ingress-service-now.yaml
安装
kubectl apply -f ingress-controller.yaml
定义ingress
# 文件名称 app-inginx-ingress.yaml
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: nginx-ingress
namespace: app-namespace-nginx
annotations:
nginx.ingress.kubernetes.io/enable-cors: 'true'
spec:
defaultBackend:
service:
name: app-service-nginx
port:
number: 80
ingressClassName: nginx
rules:
- host: kube.local.net
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service-nginx
port:
number: 80
# 应用资源
kubectl apply -f app-inginx-ingress.yaml
配置hosts
# 10.191.9.23 ingress-controller 被调度的宿主机IP
10.191.9.23 kube.local.net
访问
curl kube.local.net:30164