我想在一个服务上公开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
我怎样才能实现它?
答案 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兼容”名称,所以没有下划线,空格,疯狂字符