Docker镜像暴露两个端口时Helm Chart需配置哪些暴露端口?
端口认知误区澄清
Dockerfile中的EXPOSE 8443 9090只是声明容器内部会监听这两个端口,本身没有任何端口映射的作用,你之前理解的「hostPort 8443映射到containerPort 9090」是完全错误的。kubernetesui/dashboard:v2.4.0的两个端口实际用途为:
- 8443:容器内部提供HTTPS Web UI服务的端口
- 9090:容器内部提供指标采集、健康检查服务的端口
双端口场景Helm Chart配置方案
1. Deployment.yaml配置
两个端口都需要在容器的ports字段下声明,示例如下:
spec: template: spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" ports: - name: https containerPort: 8443 protocol: TCP - name: metrics containerPort: 9090 protocol: TCP
同时注意默认生成的健康检查探针也要同步修改,避免探针检测失败导致Pod重启:
livenessProbe: httpGet: path: /healthz port: 9090 readinessProbe: httpGet: path: /healthz port: 9090
2. Service.yaml配置
根据你需要对外暴露的服务配置端口即可,如果只需要对外提供Web UI访问,仅配置8443对应的映射即可,两个都需要暴露的话参考示例:
spec: type: {{ .Values.service.type }} ports: # 对外暴露Web UI服务,可自定义service端口,这里用标准HTTPS 443端口举例 - port: 443 targetPort: https # 可直接写端口号8443,用端口名更易维护 name: https # 如有需要可同时暴露metrics端口 - port: 9090 targetPort: metrics name: metrics
关于你提到的日志说明
"Container image "kubernetesui/dashboard:v2.4.0" already present on machine"是kubelet的正常信息日志,不是报错,含义是对应镜像已经存在于节点上,不需要重新拉取。你之前服务启动失败的根本原因是端口映射配置错误,导致流量无法打到正确的容器端口,和该日志无关。
内容的提问来源于stack exchange,提问作者Cladnic
相关产品推荐
相关产品推荐

