Kubernetes:未定义端口的服务

3

我想确认一下是否可以在 Pod 中没有容器端口的情况下暴露 Service。在下面的示例中,Pod 没有容器端口,但是 Service 有定义端口:

apiVersion: v1
metadata:
name: mypod
namespace: ggckad-s8
labels:
 app: mypod
spec:
 volumes:
- name: log-volume
  emptyDir: {}
 containers:
  - name: app
    image: kubegoldenguide/question-29-app
    volumeMounts:
    - name: log-volume
      mountPath: /var/log

kind: Service
apiVersion: v1
metadata:
name: mypod-service
namespace: ggckad-s8
spec:
  type: NodePort
  selector: 
     app: mypod
   ports: 
   - port: 8000
2个回答

5
可以在Pod中不设置容器端口而暴露服务。容器的默认端口将会被暴露到服务中。列出要从容器中暴露的端口。在此处暴露一个端口可以为系统提供有关容器使用的网络连接的附加信息,但主要是提供信息性的。在此处不指定端口并不会防止该端口被暴露。任何在容器内部的默认“0.0.0.0”地址上监听的端口都可以从网络访问。

欲了解更多信息,请参阅文档


4
文档中得知: ContainerPort 容器要暴露的端口列表。在此处暴露端口可为系统提供有关容器使用的网络连接的附加信息,但这主要是信息性的,并且不指定端口不会阻止该端口被暴露。任何在容器内部默认“0.0.0.0”地址上监听的端口都可以从网络访问。不可更新。
在服务中,仅 Port 是强制的。 如果不定义 targetPort ,则默认为 Port
只要服务中的 Port 确实是指容器正在侦听的端口,就应该可以使用,但这不是推荐的做法。
作为最佳实践,建议在服务中将名称用作 targetPort 而不是端口号。引用自文档
Pod中的端口定义具有名称,您可以在Service的targetPort属性中引用这些名称。即使Service中使用了单个配置名称的混合Pod,也可以使用相同的网络协议通过不同的端口号访问。这为部署和演进您的服务提供了很大的灵活性。例如,您可以在后端软件的下一个版本中更改Pod公开的端口号,而不会破坏客户端。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接