首页 > 解决方案 > 配置 nodeport 但 kubernetes 仍然给出端口范围

问题描述

我在nodePort模式下声明了一个服务。但有一点我不明白。也许我感到困惑。nodePort ,转发到服务的port,并由 pod 在targetPort接收。

apiVersion: v1
    kind: Service
    metadata:
      name: frontend
      labels:
        app: {{ .Release.Name }}
        product: {{ .Values.product }}
        environment: {{ .Values.environment }}
        version: {{ .Values.version }}
        component: frontend
    spec:
      type: NodePort
      ports:
      - port: 6001
        targetPort: 6001
        protocol: TCP
      selector:
        app: countly-frontend

当我在 kubernetes 上列出服务时,我看到了这个:

service/countly-frontend        NodePort       10.xx.xx.12    <none>        6001:31145/TCP    110s

通常我应该看到6001:6001而不是6001:31145?正如您可能已经猜到的那样,该应用程序正在侦听端口 6001。

标签: kubernetesgoogle-kubernetes-enginekubernetes-ingress

解决方案


让我澄清一些误解:


您不能更改nodePort托管 Kubernetes 集群的端口范围,例如GKE.


nodePort来自 Kubernetes 官方文档的一句话:

NodePort: 在每个节点的 IP 上的静态端口 (the NodePort) 上公开服务。ClusterIPService 路由到的ServiceNodePort是自动创建的。您可以NodePort通过请求从集群外部联系服务<NodeIP>:<NodePort>

-- Kubernetes.io:服务

nodePort端口范围从3000032767

你在这里看到的:

当我在 kubernetes 上列出服务时,我看到了这个:

service/countly-frontend        NodePort       10.xx.xx.12    ><none>        6001:31145/TCP    110s

具体来说: 6001:31145/TCP正确的。

例子:

假设有一个 pod,其应用程序在 port 上运行50001

这是service.yaml上述应用程序的一个:

apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  selector:
    app: hello
  ports:
    - name: hello-port
      port: 5678 # CLUSTER-IP PORT
      targetPort: 50001 # PORT WHICH YOUR APPLICATION IS RUNNING ON
      nodePort: 30051 # NODEPORT PORT 
  type: NodePort

输出$ kubectl get services

NAME               TYPE           CLUSTER-IP    EXTERNAL-IP                                           PORT(S)           AGE
hello-service      NodePort       10.86.1.195   <none>                                                5678:30051/TCP   25h

您将可以通过以下方式访问您的应用程序:

  • NodeIP:NodePort(30051)(外部访问)
  • ClusterIP:port(5678)(内部访问)
  • PodIP:targetPort(50001) (内部访问)

如果您想在端口上公开您的应用程序以6001供外部使用,您可以尝试使用LoadBalancer.

StackOverflow 上的答案在本主题中更深入:

请查看有关在GKE集群 上公开应用程序的官方文档:Cloud.google.com:Kubernetes 引擎:公开应用程序

如果您对此有任何疑问,请告诉我。


推荐阅读