如何通过Helm Chart安装ingress仅创建内部负载均衡不生成外部负载均衡
解决方案:Helm安装ingress-nginx时仅生成内部负载均衡
核心原理:ingress-nginx默认会创建公网LoadBalancer类型的Service,要改为仅生成内部负载均衡,只需在安装时通过Helm参数指定对应云厂商的内部LB注解调整Service配置即可,无需手动提前创建负载均衡资源。
步骤1:确认对应云厂商的内部LB注解
不同云服务商的内部负载均衡注解不同,常见云厂商对应注解如下:
- 阿里云:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" - 腾讯云:
service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: <你的子网ID> - AWS:
service.beta.kubernetes.io/aws-load-balancer-internal: "true" - GCP/GKE:
networking.gke.io/load-balancer-type: "Internal" - 华为云:
kubernetes.io/elb.is_internal: "true"
注意:你之前尝试修改的
internal.enabled配置是用于同时创建公网+内部两个独立LB的参数,开启后会保留公网LB,不符合你仅需内部LB的需求,保持默认关闭即可,无需修改该配置。
步骤2:两种配置方式可选
方式一:直接通过命令行传参安装(无需修改values文件)
直接在helm安装命令中追加参数即可,以GKE环境为例,命令如下:
INGRESS_EXAMPLE_NS=cloudbees-core kubectl create ns $INGRESS_EXAMPLE_NS kubens $INGRESS_EXAMPLE_NS helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update # 安装时指定内部LB注解,仅生成内部负载均衡 helm upgrade -i ingress-nginx ingress-nginx/ingress-nginx \ --set controller.service.annotations."networking\.gke\.io/load-balancer-type"=Internal
如果是其他云厂商,替换注解的键值即可。
方式二:修改values.yaml文件后安装
你之前导出的values-nginx.yaml文件,找到controller.service配置段,调整如下:
controller: service: # 给主Service加内部LB注解即可 annotations: networking.gke.io/load-balancer-type: "Internal" # 替换为对应云厂商的注解
修改保存后执行安装:
helm upgrade -i ingress-nginx ingress-nginx/ingress-nginx -f values-nginx.yaml
验证配置是否生效
安装完成后执行以下命令,查看EXTERNAL-IP列是否为集群内网段IP,非公网IP即为配置成功:
kubectl get svc ingress-nginx-controller
内容的提问来源于stack exchange,提问作者Krzysztof Jonaszko
相关产品推荐
相关产品推荐

