如何在一个部署和服务中公开 2 个端口
How to expose 2 port in one deployement and service
我想在一项服务上公开 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
如何实现?
你的 Service
非常接近,但是在 ports: 数组中,如果有多个端口则需要命名(理想情况下它们总是有名称),并且 selector:
每个 Service
只有一次,而不是每个端口:
spec:
selector:
app: etools
ports:
- name: web
port: 8080
targetPort: 8080
- name: other-port-something
port: 3100
targetPort: 3100
请注意,虽然您经常会看到 port:
和 targetPort:
等于相同的数字,但它们不一定是。所以你的容器可以在 8080 上监听,因为 docker 图片说它会,但是你的 Service
可以将它暴露给集群的其他成员,因为 port: 80
更接近人们所期望的。
也可以用自然语言名称命名 PodSpec
中的端口,然后将 Service
指向 that 值:
ports:
- name: http
port: 80
targetPort: http-in-my-pod
我推荐它,因为它使您的 Service
不必因为 PodSpec
中的 containerPort
发生变化而不得不更改,但由您自行决定。
当您提供格式错误的 yaml 时,kubectl
没有提供有用的反馈,我感到有些惊讶,但无论如何,我相信上面的代码片段是正确的。正如文档所指定的那样,名称在服务中必须是唯一的,而且 "DNS-compatible" 名称,所以没有下划线、空格、疯狂字符
我想在一项服务上公开 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
如何实现?
你的 Service
非常接近,但是在 ports: 数组中,如果有多个端口则需要命名(理想情况下它们总是有名称),并且 selector:
每个 Service
只有一次,而不是每个端口:
spec:
selector:
app: etools
ports:
- name: web
port: 8080
targetPort: 8080
- name: other-port-something
port: 3100
targetPort: 3100
请注意,虽然您经常会看到 port:
和 targetPort:
等于相同的数字,但它们不一定是。所以你的容器可以在 8080 上监听,因为 docker 图片说它会,但是你的 Service
可以将它暴露给集群的其他成员,因为 port: 80
更接近人们所期望的。
也可以用自然语言名称命名 PodSpec
中的端口,然后将 Service
指向 that 值:
ports:
- name: http
port: 80
targetPort: http-in-my-pod
我推荐它,因为它使您的 Service
不必因为 PodSpec
中的 containerPort
发生变化而不得不更改,但由您自行决定。
当您提供格式错误的 yaml 时,kubectl
没有提供有用的反馈,我感到有些惊讶,但无论如何,我相信上面的代码片段是正确的。正如文档所指定的那样,名称在服务中必须是唯一的,而且 "DNS-compatible" 名称,所以没有下划线、空格、疯狂字符