首页 > 解决方案 > 为什么 helm 忽略节点端口部分?

问题描述

我正在尝试在特定端口上安装带有 nodeport 的掌舵图。例如:30005,但 helm 忽略 nodeport 部分。

==> v1/Service
NAME       TYPE      CLUSTER-IP     EXTERNAL-IP  PORT(S)         AGE
hello-app  NodePort  10.109.69.245  <none>       8080:32146/TCP  0s

我尝试设置特定端口:

helm install --set service.type=NodePort,service.nodePort=30005 --name hello-app /home/ubuntu/hello-app

我的values.yaml“服务”部分。

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

service:
  type: NodePort
  port: 8080
  nodePort: 30005

我的预期结果:

==> v1/Service
NAME       TYPE      CLUSTER-IP     EXTERNAL-IP  PORT(S)         AGE
hello-app  NodePort  10.109.69.245  <none>       8080:30005/TCP  0s

标签: kuberneteskubernetes-helm

解决方案


显然,您在服务的 helm 模板中的某个地方有错字,或者忽略了变量名称区分大小写的事实。请仔细检查。

还可以查看官方参考nginx图表示例,其中服务helm 模板允许type并且nodePort最终用户也可以配置,它与 helm 覆盖参数 (--set) 完美配合。

您可以使用以下命令在发布安装之前验证 helm 呈现的清单文件:

helm template --set service.type=NodePort --set service.nodePort=31000 --debug docs/examples/nginx/

最后一件事:

请确保您指定的 nodePort 尚未使用。
您可以使用--server-dry-run带有 的选项来执行此操作kubectl,例如

kubectl apply -f service-31000-nodeport-conflict.yaml --server-dry-run

如果它已经被占用,您会看到与此类似的错误,从 API 服务器返回:

The Service "release-name-nginx-conflict" is invalid: spec.ports[0].nodePort: Invalid value: 31000: provided port is already allocated

推荐阅读