【问题标题】:kubernetes - Use ports of other containers on the same pod for setting environment variableskubernetes - 使用同一个 pod 上其他容器的端口来设置环境变量
【发布时间】:2018-08-05 07:38:17
【问题描述】:

我想以编程方式与同一个 pod 中的容器进行通信。

所以,我决定将辅助容器(本例中为bar1-containerbar2-container)的端口设置为环境变量 的主容器(即 foo-container)。

但是,我无法弄清楚如何在我的部署配置的 .yaml 文件中隐式传递辅助端口的暴露端口:

apiVersion:  apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: test-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: web
        tier: frontend
    spec:
      containers:
      # Only container to be exposed outside the pod
      - name: foo-container
        image: foo
        env:
        - name: BAR_1_PORT
          # HOW TO GET PORT HERE IMPLICITLY ???
          value: XXXX 
        - name: BAR_2_PORT
          # HOW TO GET PORT HERE IMPLICITLY ???
          value: XXXX
        ports:
        - name: https
          containerPort: 443
        - name: http
          containerPort: 80
      # SubContainer 1
      - name: bar1-container
        image: bar1
      # SubContainer 2
      - name: bar2-container
        image: bar2

我想知道是否有办法使用${some-variable-or-so-here} 之类的端口,而不是5300809000 或从容器中公开的任何端口。

P.S:我故意没有在上面的 yaml 配置中指定辅助容器的 portscontainerPort 值,因为它们不会暴露在 pod 之外。

【问题讨论】:

    标签: docker kubernetes environment-variables yaml


    【解决方案1】:

    您在此处混合容器、pod 和服务。如果你在同一个 pod 中有多个容器,为了在它们之间进行通信,你根本不需要服务,你还需要将它指向一个主机名,因为它们共享同一个网络命名空间。您需要做的就是在您的特定服务正在侦听的端口上连接到localhost。例如你可以让 nginx 容器(监听 80)通过localhost:9000 连接到 php-fpm 的第二个容器服务。

    【讨论】:

    • 感谢localhost 点,将为它编辑问题。但是,从您的回答中,我是否应该得出仍然不能将 php-fpm 的端口 9000 隐式设置为环境变量?
    • 当您将容器组合到一个 pod 中时,您会提前知道它们将如何运行(它们将使用哪些端口),因此如果您的服务需要通过 env var 知道这一点,您应该按原样对其进行硬编码定义为在上运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多