在Google容器引擎中创建一个Pod是否可以暴露两个端口:8080端口监听传入内容,80端口将此内容分发给客户端?
Google提供了以下命令示例来创建Pod:
kubectl run hello-node --image=gcr.io/${PROJECT_ID}/hello-node --port=8080
我似乎无法定义监听端口,当我添加第二个“--port=”开关时,仅暴露一个端口。是否有一种方法可以公开第二个端口,或者我每个容器只能使用一个端口?
在Google容器引擎中创建一个Pod是否可以暴露两个端口:8080端口监听传入内容,80端口将此内容分发给客户端?
Google提供了以下命令示例来创建Pod:
kubectl run hello-node --image=gcr.io/${PROJECT_ID}/hello-node --port=8080
我似乎无法定义监听端口,当我添加第二个“--port=”开关时,仅暴露一个端口。是否有一种方法可以公开第二个端口,或者我每个容器只能使用一个端口?
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
如果需要通过helm实现,则可以如下操作:
deployment.yaml
ports:
- containerPort: {{ .Values.containerport1 }}
#name: containerport1
- containerPort: {{ .Values.containerport2 }}
#name: containerport2
- containerPort: {{ .Values.containerport3 }}
#name: containerport3
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 }}
在安装Helm图表时,可以使用--set参数设置值。
values.yaml
containerport1: 8001
containerport2: 8002
containerport3: 8003
exposedport1: 8004
exposedport2: 8005
exposedport3: 8006
在另一个答案中指出,使用 Kubernetes 可以进行定位,还可以使用多个端口:
kubectl expose deployment example --type=LoadBalancer --port 8080,8081 --target-port 80
从命令行可以使用--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"}]}]}}}}'
Kubernetes支持目标端口:
kubectl expose deployment example --type=LoadBalancer --port 8080 --target-port 80
您可以使用 --port 参数两次 kubectl run hello-node --image=gcr.io/${PROJECT_ID}/hello-node --port=8080 --port=8081