You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:45:05