Tep*_*epu 23
让我们举个例子并尝试借助图表来理解。考虑一个具有 2 个节点和一个服务的集群。每个节点都有 2 个 Pod,每个 Pod 有 2 个容器,即应用程序容器和 Web 容器。
NodePort:30001(每个节点的集群级公开端口)
端口:80(服务端口)
targetPort:8080(应用程序容器端口应在 docker 暴露中提及)
targetPort:80(在 docker 公开中应提及相同的 Web 容器端口)
现在下图应该可以帮助我们更好地理解它。
有关参考和更多详细信息,请参阅以下链接 https://theithollow.com/2019/02/05/kubernetes-service-publishing/
lok*_*oki 22
containerPort 作为 pod 定义的一部分仅用于提供信息。最终,如果您想将此作为集群或节点中的服务公开,那么您必须创建一个服务。
要回答您的问题,是的,如果您将其作为 Kubernetes 服务的一部分公开就足够了。作为 pod 定义的一部分提及是一个很好的做法,这样如果有人查看定义就可以了解运行容器服务的端口。
这在这里得到了很好的解释-
容器暴露的端口和服务的端口在Kubernetes中是不同的概念。
如果你想为你的应用创建一个服务,你的 pod 必须有一个端口。例如,这是一个 pod yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 8080
Run Code Online (Sandbox Code Playgroud)
containerPort 设置应用程序将公开的端口。
要通过服务访问此应用程序,您必须使用此类 yaml 创建服务对象:
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
run: my-nginx
Run Code Online (Sandbox Code Playgroud)
在这个 yaml 中,关键字 port 设置服务的端口。targetPort 是您的应用程序的端口。所以,服务的端口是不同的。
这是来自官方文档的一个很好的定义:
Kubernetes 服务是一种抽象,它定义了一组逻辑 Pod 和访问它们的策略 - 有时称为微服务。服务所针对的 Pod 集(通常)由标签选择器决定(请参阅下文了解为什么您可能需要没有选择器的服务)。
| 归档时间: |
|
| 查看次数: |
14012 次 |
| 最近记录: |