在Google容器引擎中公开两个端口

时间:2015-12-28 22:58:47

标签: google-cloud-platform kubernetes gcloud google-kubernetes-engine

是否可以在Google容器引擎中创建一个暴露两个端口的Pod:端口8080正在侦听传入内容,端口80将此内容分发给客户端?

Google提供了以下创建Pod的命令:

kubectl run hello-node --image=gcr.io/${PROJECT_ID}/hello-node --port=8080

我似乎无法定义监听端口,并且在添加第二个“--port =”开关时,只会暴露一个端口。 有没有办法暴露第二个端口,或者每个容器只限一个端口?

6 个答案:

答案 0 :(得分:13)

不,您无法在kubectl run中指定多个端口。但您可以使用kubectl create创建复制控制器,并为容器指定多个端口。

https://github.com/kubernetes/examples/blob/master/cassandra/cassandra-statefulset.yaml有一个例子:

          ports:
        - containerPort: 7000
          name: intra-node
        - containerPort: 7001
          name: tls-intra-node
        - containerPort: 7199
          name: jmx
        - containerPort: 9042
          name: cql

答案 1 :(得分:1)

在命令行中,可以使用-overrides 选项指定多个端口:

此示例公开了端口80和8080:

    export APP_NAME=app-hello
    export IMAGE=gcr.io/google-samples/hello-app:1.0
    kubectl run $APP_NAME \
                --image=$IMAGE \
                --overrides='{"spec": {"template":  {"spec": {"containers": [{"name": "'$APP_NAME'", "image": "'$IMAGE'",
 "ports": [{"containerPort": 8080, "protocol": "TCP"}, {"containerPort": 80, "protocol": "TCP"}]}]}}}}'

答案 2 :(得分:1)

如果需要掌舵,可以通过以下方式实现:

deployment.yaml

        ports:
        - containerPort: {{ .Values.containerport1 }}
          #name: containerport1
        - containerPort: {{ .Values.containerport2 }}
          #name: containerport2
        - containerPort: {{ .Values.containerport3 }}
          #name: containerport3

服务文件需要有一个端口名,否则会出现渲染错误。

service.yaml

  ports:
  - name: containerport1
    protocol: TCP
    port: {{ .Values.exposedport1 }}
    targetPort: {{ .Values.containerport1 }}
  - name: containerport2
    protocol: TCP
    port: {{ .Values.exposedport2 }}
    targetPort: {{ .Values.containerport2 }}
  - name: containerport3
    protocol: TCP
    port: {{ .Values.exposedport3 }}
    targetPort: {{ .Values.containerport3 }}

可以在安装头盔图表时使用--set参数设置值。

values.yaml

containerport1: 8001
containerport2: 8002
containerport3: 8003
exposedport1: 8004
exposedport2: 8005
exposedport3: 8006

答案 3 :(得分:0)

Kubernetes支持目标端口:

kubectl expose deployment example --type=LoadBalancer --port 8080 --target-port 80

答案 4 :(得分:0)

使用kubernetes在另一个答案中指出允许定位,但也可以指定多个端口:

kubectl expose deployment example --type=LoadBalancer --port 8080,8081 --target-port 80

答案 5 :(得分:-1)

您可以使用--port参数两次 kubectl运行hello-node --image = gcr.io / $ {PROJECT_ID} / hello-node --port = 8080 --port = 8081