K8s安装ingress-nginx

安装ingress-nginx

问题

  1. 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解析到其他两个节点也能正常访问,否则访问失败

  2. 下载镜像失败问题

    • 找到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码后缀去掉 @及其后面的部门

  3. ingress无法访问问题

    把ingress域名指向ingress控制器服务所调度到的宿主机IP
    
  4. 添加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
posted @ 2024-11-11 11:37  菜阿  阅读(181)  评论(0编辑  收藏  举报