如何在一个部署和服务中公开2个端口

时间:2017-11-30 07:28:12

标签: kubernetes kubectl

我想在一个服务上公开2个端口:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: etools
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: etools
    spec:
      containers:
      - name: etools
        image: eregistry.azurecr.io/etools:latest
        ports:
        - containerPort: 8080
        - containerPort: 3100
---
apiVersion: v1
kind: Service
metadata:
  name: etools
spec:
  ports:
  - port: 8080
  selector:
    app: etools
  ports:
  - port: 3100
  selector:
    app: etools

我怎样才能实现它?

1 个答案:

答案 0 :(得分:1)

您的Service非常接近,但在ports:数组中,如果有多个端口(理想情况下它们总是有名称),则需要命名端口,{{1}只是每selector:一次,而不是每个端口:

Service

请注意,虽然您经常会看到spec: selector: app: etools ports: - name: web port: 8080 targetPort: 8080 - name: other-port-something port: 3100 targetPort: 3100 port:等于相同的数字,但它们并非必须如此。因此,您的容器可以在8080上收听,因为码头图片会显示它,但是您的targetPort:可能会将其显示给您的群集中的其他成员Service,以便更接近人们的期望。

也可以使用自然语言名称命名port: 80中的端口,然后将PodSpec指向 值:

Service

我建议,因为它会导致您ports: - name: http port: 80 targetPort: http-in-my-pod 与仅因为Service中的containerPort发生变化而需要更改,但由您自行决定。

我有点惊讶PodSpec在你提供错误的yaml时没有提供有用的反馈,但不管怎样,我相信上面的代码段是正确的。正如文档所指定的那样,名称在服务中必须既是唯一的,也是“DNS兼容”名称,所以没有下划线,空格,疯狂字符