配置nodeport,但kubernetes仍然提供端口范围



我在nodePort模式中声明了一个服务。但有件事我不明白。也许我有点困惑了。节点端口,转发到服务的端口argetPort上接收。

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上侦听,您可能已经猜到了。

不确定这是否可行:

ports:
- protocol: TCP
port: 6001
targetPort: 6001

或者,如果您可以尝试将原始中的targetPort更改为nodePort

让我澄清一些误解:


您不能更改像GKE这样的托管Kubernetes集群的nodePort端口范围。


Kubernetes官方文档中关于nodePort的一个词:

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

--Kubernetes.io:服务

nodePort端口的范围从3000032767

你在这里看到的:

当我在kubernetes上列出服务时,我看到的是:

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

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

示例:

假设有一个pod,其中有一个应用程序在端口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上的答案在本主题中更深入:

  • 您可以通过查看此答案来检查创建类型为NodePort的服务对象时到底发生了什么
  • minikube视角下的服务解释

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

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

这就是kubernetes服务节点端口的工作方式。NodePort服务绑定在30000-32767范围内的随机端口上。如果要指定绑定端口,请添加nodePort属性以设置它(文档(,但它必须在所需范围内。例如,我选择30007:
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
nodePort: 30007
selector:
app: countly-frontend

相关内容

  • 没有找到相关文章

最新更新