Kind集群中Helm安装ingress-nginx无法监听80端口求助
KinD集群ingress-nginx主机端口转发补丁总结&Helm适配方案
核心补丁内容(来自KinD官方ingress-nginx manifest)
官方为KinD定制的manifest主要做了3处关键修改,让主机80/443端口直接映射到ingress controller:
Deployment容器端口绑定:给ingress-nginx controller的容器添加
hostPort,将容器的80、443端口直接绑定到KinD节点(运行在主机上的容器)的对应端口,这样主机端口流量能直接传到controller容器。spec: template: spec: containers: - name: controller ports: - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP启用主机网络与DNS适配:开启
hostNetwork: true让Pod使用节点的网络命名空间,确保hostPort绑定生效;同时设置dnsPolicy: ClusterFirstWithHostNet,保证Pod在主机网络模式下仍能正常使用集群DNS服务。spec: template: spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNetService类型配置:将Service设为
LoadBalancer(KinD会自动降级为NodePort),同时明确端口映射关系,避免随机NodePort导致的访问问题(核心生效还是靠前面的hostPort)。spec: type: LoadBalancer ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443
Helm部署的适配方法
你可以通过Helm的自定义values或者命令行参数,把上述补丁配置应用到Helm部署的ingress-nginx:
方式1:自定义values.yaml
创建values-kind.yaml文件:
controller: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet hostPort: enabled: true http: 80 https: 443 service: type: LoadBalancer ports: http: 80 https: 443
执行安装/升级命令:
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \ -f values-kind.yaml \ --namespace ingress-nginx --create-namespace
方式2:命令行直接传参
如果不想写配置文件,直接用命令行参数覆盖默认值:
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx --create-namespace \ --set controller.hostNetwork=true \ --set controller.dnsPolicy=ClusterFirstWithHostNet \ --set controller.hostPort.enabled=true \ --set controller.hostPort.http=80 \ --set controller.hostPort.https=443 \ --set controller.service.type=LoadBalancer
配置完成后,ingress-nginx就能直接监听主机的80/443端口,你无需端口转发即可通过prometheus.example.com这类域名访问集群内服务的UI。
内容的提问来源于stack exchange,提问作者800711
相关产品推荐
相关产品推荐

