是否可以在Google容器引擎中创建一个暴露两个端口的Pod:端口8080正在侦听传入内容,端口80将此内容分发给客户端?
Google提供了以下创建Pod的命令:
kubectl run hello-node --image=gcr.io/${PROJECT_ID}/hello-node --port=8080
我似乎无法定义监听端口,并且在添加第二个“--port =”开关时,只会暴露一个端口。 有没有办法暴露第二个端口,或者每个容器只限一个端口?
答案 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