使用 Helm 安装 Ingress 控制器是一种方便且灵活的方式,可以通过 Helm Chart 对 Ingress 进行配置和管理。以下是安装 ingress-nginx 控制器的步骤:

 

添加 ingress-nginx Helm 仓库

1、使用脚本自动安装helm,通过 curl 命令下载并执行该脚本,并安装 Helm 到你的系统

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

 

2、添加 ingress-nginx 仓库

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

 

3、搜索ingress-nginx安装包

helm search repo ingress-nginx

 

4、下载ingress-nginx安装包

helm pull ingress-nginx/ingress-nginx

 

5、解压后编辑values.yaml文件

tar -xf ingress-nginx-4.10.1.tgz

 

6、修改完后保存退出接着创建ingress-nginx命名空间

kubectl create ns ingress-nginx

 

7、为需要部署 ingress 的节点上加标签

kubectl label node kmaster ingress=true

 

创建daemonset-prod.yaml文件用来覆盖 ingress-nginx 默认的Values.yaml值

1、主节点部署方式

# daemonset-prod.yaml
controller:
  name: controller
  image:
    registry: registry.cn-hangzhou.aliyuncs.com
    image: google_containers/nginx-ingress-controller
    tag: "v1.10.1"
    digest:
    digestChroot:
  dnsPolicy: ClusterFirstWithHostNet
  hostNetwork: true
  publishService:  # hostNetwork 模式下设置为false,通过节点IP地址上报ingress status数据
    enabled: false
  # 是否需要处理不带 ingressClass 注解或者 ingressClassName 属性的 Ingress 对象
  # 设置为 true 会在控制器启动参数中新增一个 --watch-ingress-without-class 标注
  watchIngressWithoutClass: false
    
  # -- Use a `DaemonSet` or `Deployment`
  kind: DaemonSet
  # kubeadm 安装的集群默认情况下master是有污点,需要容忍这个污点才可以部署
  tolerations:
  - key: "node-role.kubernetes.io/master"
    operator: "Exists"
    effect: "NoSchedule"
  nodeSelector:   # 固定到kmaster节点
    kubernetes.io/hostname: kmaster
    #ingress: "true"
  service:  
    type: ClusterIP #LoadBalancer修改为ClusterIP
    
  # 强烈建议开启 admission webhook
  admissionWebhooks:
    enabled: true
    createSecretJob:
      resources:
        limits:
          cpu: 10m
          memory: 20Mi
        requests:
          cpu: 10m
          memory: 20Mi
    patchWebhookJob:
      resources:
        limits:
          cpu: 10m
          memory: 20Mi
        requests:
          cpu: 10m
          memory: 20Mi
    patch:
      enabled: true
      image:
        registry: registry.cn-hangzhou.aliyuncs.com
        image: google_containers/kube-webhook-certgen
        tag: v1.4.1
        digest:
#defaultBackend:  # 配置默认后端
#  enabled: true
#  name: defaultbackend
#  image:
#    repository: cnych/ingress-nginx-defaultbackend
#    tag: "1.5"

 

保存退出后执行以下脚本

helm upgrade --install ingress-nginx . -f ./daemonset-prod.yaml --create-namespace --namespace ingress-nginx 

 

或者混合方式部署方式

# daemonset-prod-mix.yaml
controller:
  name: controller
  image:
    registry: registry.cn-hangzhou.aliyuncs.com
    image: google_containers/nginx-ingress-controller
    tag: "v1.10.1"
    digest:
    digestChroot:
  dnsPolicy: ClusterFirstWithHostNet
  hostNetwork: true
  publishService:  # hostNetwork 模式下设置为false,通过节点IP地址上报ingress status数据
    enabled: false
  # 是否需要处理不带 ingressClass 注解或者 ingressClassName 属性的 Ingress 对象
  # 设置为 true 会在控制器启动参数中新增一个 --watch-ingress-without-class 标注
  watchIngressWithoutClass: false
    
  # -- Use a `DaemonSet` or `Deployment`
  kind: DaemonSet
  tolerations:   # 容忍主节点和工作节点的污点
  - key: "node-role.kubernetes.io/master"
    operator: "Exists"
    effect: "NoSchedule"
  - key: "node-role.kubernetes.io/control-plane"
    operator: "Exists"
    effect: "NoSchedule"
  nodeSelector:   # 允许在所有 Linux 节点上部署
    kubernetes.io/os: linux
  service:  
    type: ClusterIP #LoadBalancer修改为ClusterIP
  admissionWebhooks: # 强烈建议开启 admission webhook
    enabled: true
    createSecretJob:
      resources:
        limits:
          cpu: 10m
          memory: 20Mi
        requests:
          cpu: 10m
          memory: 20Mi
    patchWebhookJob:
      resources:
        limits:
          cpu: 10m
          memory: 20Mi
        requests:
          cpu: 10m
          memory: 20Mi
    patch:
      enabled: true
      image:
        registry: registry.cn-hangzhou.aliyuncs.com
        image: google_containers/kube-webhook-certgen
        tag: v1.4.1
        digest:

 

保存退出后执行以下脚本

helm upgrade --install ingress-nginx . -f ./daemonset-prod-mix.yaml --create-namespace --namespace ingress-nginx