我在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
端口的范围从30000
到32767
。
你在这里看到的:
当我在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引擎:展示应用
如果你对此有任何疑问,请告诉我。
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