K8s v1.23.9使用helm安装ingress controller

  1. 安装helm
# 我这里是将helm安装到的master节点,所以下面的命令实在master节点执行的,这里最好是直接使用root用户执行。
 
wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
tar -zxvf helm-v3.7.2-linux-amd64.tar.gz
mv linux-amd64/helm  /usr/local/bin/
  1. 指定ingress controller 安装的节点
    # 为了便于将集群中的服务暴露到集群外部,需要使用Ingress。
    # 接下来使用Helm将ingress-nginx部署到Kubernetes上。
    # Nginx Ingress Controller被部署在Kubernetes的边缘节点上。
    # 这里的 node 后面跟的是你的节点名称,我这里是使用的master节点

    kubectl label node master node-role.kubernetes.io/edge=


    # 下载ingress-nginx的helm chart

    wget https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.0.13/ingress-nginx-4.0.13.tgz

    # 查看ingress-nginx-4.0.13.tgz这个chart的可定制配置
    
    helm show values ingress-nginx-4.0.13.tgz

定制velue.yaml

  controller:
  ingressClassResource:
    name: nginx
    enabled: true
    default: true
    controllerValue: "k8s.io/ingress-nginx"
  admissionWebhooks:
    enabled: false
  replicaCount: 1
  image:
    # registry: k8s.gcr.io
    # image: ingress-nginx/controller
    # tag: "v1.1.0"
    registry: docker.io
    image: unreachableg/k8s.gcr.io_ingress-nginx_controller
    tag: "v1.1.0"
    digest: sha256:4f5df867e9367f76acfc39a0f85487dc63526e27735fa82fc57d6a652bafbbf6
  hostNetwork: true
  nodeSelector:
    node-role.kubernetes.io/edge: ''
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
              - key: app
                operator: In
                values:
                  - nginx-ingress
              - key: component
                operator: In
                values:
                  - controller
          topologyKey: kubernetes.io/hostname
  tolerations:
    - key: node-role.kubernetes.io/master
      operator: Exists
      effect: NoSchedule
    - key: node-role.kubernetes.io/master
      operator: Exists
      effect: PreferNoSchedule    
nginx ingress controller的副本数replicaCount为1,将被调度到master主节点上。这里并没有指定nginx ingress controller service的externalIPs,而是通过hostNetwork: true设置nginx ingress controller使用宿主机网络。 因为k8s.gcr.io被墙,这里替换成unreachableg/k8s.gcr.io_ingress-nginx_controller提前拉取一下镜像:

docker pull unreachableg/k8s.gcr.io_ingress-nginx_controller:v1.1.0

因为这里作者使用的是1.23.9的版本,该版本还可以使用docker,所以作者这里就直接使用的docker作为k8s的运行时!
  1. 安装并校验运行是否成功
    helm install ingress-nginx ingress-nginx-4.0.13.tgz --create-namespace -n ingress-nginx -f values.yaml
    
    # 校验ingress-nginx是否运行成功
    kubectl get pod -n ingress-nginx
    
    NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx-controller-7f574989bc-xwbf4   1/1     Running   0          117s
    
    # 测试访问http://master节点IP,返回默认的nginx 404页,则部署完成。

参考文章、博客:
使用kubeadm部署Kubernetes 1.23
国内环境Ubuntu-20.04安装Kubernetes-1.23.9