为什么在 Kuberntes 部署/容器定义中需要端口/容器端口?

Ily*_*dik 8 kubernetes kubernetes-deployment kubernetes-container kubernetes-service kubernetes-networking

当我在 kubernetes 中定义例如部署时,有一个包含容器列表的部分,每个容器都包含一组端口,例如:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

现在这里的文档明确表示它不会影响连接:

要从容器公开的端口列表。在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。在此处不指定端口不会阻止该端口被公开。任何侦听容器内默认“0.0.0.0”地址的端口都可以从网络访问。无法更新。

现在看来它并没有真正影响任何东西,只是信息性的,但这究竟意味着什么,它在哪里使用?

我发现它的一个用途是,如果端口定义了一个名称,则可以通过该名称从服务中引用它。

是它还是这个规范还有其他用途?

Mal*_*thi 13

当您引用文档时,

要从容器公开的端口列表。在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。在此处不指定端口不会阻止该端口被公开。任何侦听容器内默认“0.0.0.0”地址的端口都可以从网络访问。无法更新。

定义 的containerPorts目的纯粹是为了文档。它仅被其他开发人员用于了解容器侦听的端口。Kubernetes 从 docker 借用了这个想法,它对这里EXPOSE提到的命令执行相同的操作。

  • 如果containerPort有一个名称,并且该名称被服务用作targetPort,那么它似乎并不纯粹是信息性的? (7认同)