集装箱港口POS与集装箱港口服务

时间:2019-04-18 07:32:17

标签: kubernetes

我想了解服务端口和pod容器端口之间的映射。

我是否需要将容器端口定义为Pod的一部分以及服务的一部分?还是将其作为服务的一部分公开是可以的吗?

4 个答案:

答案 0 :(得分:7)

containerPort作为pod定义的一部分仅用于提供信息。最终,如果要将其作为服务公开到群集或节点中,则必须创建一个服务。

要回答您的问题,是的,只要将其作为Kubernetes服务的一部分公开即可。最好将其作为Pod定义的一部分提及,这样,如果有人查看该定义,便可以了解您的容器服务正在运行的端口。

这很好地解释了here-

答案 1 :(得分:1)

在Kubernetes中,容器公开的端口和服务的端口是不同的概念。

如果要为您的应用程序创建服务,则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

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

在此Yaml中,关键字port设置服务的端口。 targetPort是您的应用程序的端口。因此,服务的端口是不同的。

以下是官方文档中的一个很好的定义:

  

Kubernetes服务是一种抽象,它定义了一组逻辑   Pod和访问它们的策略-有时称为   微服务。服务所针对的Pod集合通常是   由标签选择器确定(有关为什么您可能需要   没有选择器的服务)。

答案 2 :(得分:1)

让我们举个例子,并尝试借助图表来理解。 考虑一个具有2个节点和一个服务的群集。每个节点有2个容器,每个节点有2个容器,分别是应用容器和Web容器。

NodePort:3001(每个节点的群集级别公开端口)

端口:80(服务端口)

targetPort:8080(应用程序容器端口在docker暴露中应该提到)

targetPort:80(在docker公开中应该提到Web容器端口)

现在下图应该可以帮助我们更好地理解它。

enter image description here

有关参考和更多详细信息,请参见下面的链接https://theithollow.com/2019/02/05/kubernetes-service-publishing/

答案 3 :(得分:0)

在示例部署下方找到

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

它将部署两个实例nginx pod。容器端口在容器规范中定义。这表明nginx正在端口8080上运行。

现在让我们部署服务

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:my-nginx 标签的任何Pod上的TCP端口8080 服务规范显示该服务在端口80上公开,该端口可以是任何端口,其他Pod用来访问nginx服务