Kubernetes NodePort 自定义端口

Posted

技术标签:

【中文标题】Kubernetes NodePort 自定义端口【英文标题】:Kubernetes NodePort Custom Port 【发布时间】:2017-10-11 15:24:28 【问题描述】:

有没有办法在 kubernetes 服务 YAML 定义中指定自定义 NodePort 端口? 我需要能够在我的配置文件中明确定义端口。

【问题讨论】:

【参考方案1】:

您可以在 Service 部署中设置类型 NodePort。请注意,使用选项--service-node-port-range(默认为30000-32767)为您的API 服务器配置了Node Port Range。您也可以通过在Port 对象下设置nodePort 属性来专门指定该范围内的端口,否则系统将为您选择该范围内的端口。

因此,指定NodePortService 示例将如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30080
      name: http
    - port: 443
      nodePort: 30443
      name: https
  selector:
    name: nginx

有关 NodePort 的更多信息,请参阅this doc。配置 API Server 节点端口范围请见this。

【讨论】:

您好,指定一个固定的节点端口是个坏习惯吗?【参考方案2】:

您可以在 service.yaml 文件中使用 nodeport 定义静态 NodePort

spec:
  type: NodePort
  ports:
    - port: 3000
      nodePort: 31001
      name: http

【讨论】:

【参考方案3】:

您可以实际运行此命令,看看如何在 yaml 中实现。

kubectl create service hello-svc --tcp=80:80 --type NodePort --node-port 30080 -o yaml --dry-run > hello-svc.yaml

https://pachehra.blogspot.com/2019/11/kubernetes-imperative-commands-with.html

【讨论】:

【参考方案4】:

是的,你可以自己定义所有这三个端口

apiVersion: v1
kind: Service
metadata:
  name: posts-srv
spec:
  type: NodePort
  selector:
    app: posts
  ports:
    - name: posts
      protocol: TCP
      port: 4000
      targetPort: 4000
      nodePort: 31515

【讨论】:

【参考方案5】:

对于需要在不创建yaml文件的情况下使用kubectl命令的用户,可以创建一个指定端口的NodePort服务:

kubectl create nodeport NAME [--tcp=port:targetPort] [--dry-run=server|client|none]

例如:

kubectl create service nodeport myservice --node-port=31000 --tcp=3000:80

您可以查看 Kubectl 参考以了解更多信息:

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-service-nodeport-em-

【讨论】:

以上是关于Kubernetes NodePort 自定义端口的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 kubernetes nodeport 服务

Kubernetes进阶之路(九)Service系列之ClusterIP&NodePort

kubernetes各种port关系

kubernetes 源码分析之ingress

Kubernetes进阶之ingress-nginx

第153天学习打卡(Kubernetes Ingress Helm)