考虑一个非常简单的service.yaml文件:
kind: Service
apiVersion: v1
metadata:
name: gateway-service
spec:
type: NodePort
selector:
app: gateway-app
ports:
- name: gateway-service
protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080
Run Code Online (Sandbox Code Playgroud)
我们知道服务会将所有请求路由到带有此标签app=gateway-app的端口8080(又名targetPort)的 Pod 。port服务定义中还有另一个字段,80在本例中为此处。这是做什么port用的?我们应该什么时候使用它?
从文档中,还有这一行:
默认情况下,
targetPort将设置为与端口字段相同的值。参考:https : //kubernetes.io/docs/concepts/services-networking/service/
换句话说,我们什么时候应该保持targetPort和port相同的,在不?
在一个nodePort服务中,你可以定义 3 种类型的端口:
目标端口:
正如您在问题中提到的,这是 pod 的相应端口,本质上containerPort是您在副本清单中定义的s。
端口(服务端口):
这定义了其他本地资源可以引用的端口。引用 Kubernetes 文档:
此服务将 [本地] 显示为 .spec.clusterIP:spec.ports[*].port
这意味着,这不能公开访问,但是您可以通过其他资源(在集群内)使用此端口来引用您的服务端口。例如,当您为此服务创建入口时。在您的入口中,您将需要在servicePort字段中显示此端口:
...
backend:
serviceName: test
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
节点端口:
这是您节点上公开公开您的服务的端口。再次引用文档:
此服务将作为 [NodeIP]:spec.ports[*].nodePort [公开] 可见
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |