在deployment.yaml中应将NodePort规范配置在哪个位置?
核心问题说明
NodePort是Kubernetes Service资源的配置字段,不属于Deployment的配置范畴,不能写在deployment.yaml文件里,你需要单独创建Service资源来对外暴露端口。
具体配置步骤
1. 先修正Deployment的小问题
你当前deployment.yaml中LDAP端口的协议配置为UDP,ApacheDS默认LDAP服务走TCP协议,先调整端口配置,避免协议不匹配导致访问失败:
ports: - name: admin-port containerPort: 8080 hostPort: 8080 protocol: TCP - name: ldap-port containerPort: 10389 hostPort: 10389 protocol: TCP # 确认你确实需要UDP的话可以保留原值
另外你配置的存活探针用curl检测LDAP端口不太准确,curl默认不支持ldap协议,建议后续换成nc -zv localhost 10389或者ldap客户端工具检测。
2. 新建Service配置文件
如果你是通过helm create生成的标准Chart结构,Chart的templates目录下默认有service.yaml文件,直接替换内容即可;如果没有就新建templates/service.yaml文件,内容如下:
apiVersion: v1 kind: Service metadata: name: {{ include "buildchart.fullname" . }} labels: {{- include "buildchart.labels" . | nindent 4 }} spec: type: NodePort selector: # 直接复用Chart的选择器标签,和Deployment的matchLabels完全匹配 {{- include "buildchart.selectorLabels" . | nindent 4 }} ports: # 暴露LDAP服务端口 - name: ldap-port port: 10389 # 集群内部访问Service的端口 targetPort: ldap-port # 对应Pod中containerPort的名称,也可以直接写10389 nodePort: 30007 # 节点侧暴露的端口,必须在K8s默认的30000-32767端口范围内 protocol: TCP # 如果需要对外暴露8080管理端口,可以保留下面这段,不需要就删掉 - name: admin-port port: 8080 targetPort: admin-port nodePort: 30080 protocol: TCP
如果不需要固定NodePort端口,可以删掉nodePort字段,Kubernetes会自动分配可用端口,避免手动配置的端口被占用。
3. 部署验证
修改完成后执行helm upgrade更新你的Helm release即可,部署完成后,你可以通过节点IP:30007访问LDAP服务,在容器所在节点本地也可以用127.0.0.1:30007直接访问。
内容的提问来源于stack exchange,提问作者mmaceachran
相关产品推荐
相关产品推荐

