【问题标题】:Can nginx.conf access environment variables?nginx.conf 可以访问环境变量吗?
【发布时间】:2015-09-04 08:03:47
【问题描述】:

我正在尝试在 kubernetes 集群上使用 nginx 运行 docker 容器。我正在为所有其他容器使用环境变量服务发现,所以我想保持它的一致性,而不必仅仅因为这个而将 skydns 之类的东西加入到混合中。是否可以访问 nginx 中的环境变量,以便我可以告诉它代理传递给 kubernetes 服务?

【问题讨论】:

  • [此服务器故障问题][1] 应包含您问题的答案。 [1]:serverfault.com/questions/577370/…
  • 这行得通,但相当hacky,我确实看到了,但我希望有一种“kubernetes 方式”可以做到这一点。

标签: nginx docker environment-variables kubernetes


【解决方案1】:

【讨论】:

  • 谢谢,这确实有效,您是否有机会将您的答案浓缩为一个答案,以便更有条理?
【解决方案2】:

您的意思是在 nginx 的配置文件中使用以这种方式设置的 env var 的值?我过去做过的一件事是有一个由 Docker 容器运行的 run.sh 配置脚本,它使用 env 变量来影响 nginx 配置模板文件中的变电站——你是说这个吗?

【讨论】:

  • 不是100%清楚你在说什么,你能举个例子吗?但要回答你的问题,是的,我希望在我的 nginx 配置中使用这些环境变量。
【解决方案3】:

做 hacky HEREDOC 有很多问题,包括它只有一次服务发现(并不比硬编码好多少)。所以我的解决方案最终是使用 confd 模板化 nginx 并在环境变量更改时重新启动 nginx。这是 confd 的链接:https://github.com/kelseyhightower/confd

【讨论】:

    【解决方案4】:

    在作为卷挂载的 ConfigMap 中保留一个包含的配置文件也应该有效。

    您可能需要为此更改配置文件的结构。

    【讨论】:

      【解决方案5】:

      在规范中你可以定义一个环境变量,例如

      spec:
        containers:
        - name: kibana-logging
          image: gcr.io/google_containers/kibana:1.3
          livenessProbe:
            name: kibana-liveness
            httpGet:
              path: /
              port: 5601
            initialDelaySeconds: 30
            timeoutSeconds: 5
          env:
            - name: "ELASTICSEARCH_URL"
              value: "http://elasticsearch-logging:9200"
          ports:
          - containerPort: 5601
            name: kibana-port
            protocol: TCP
      

      这将导致环境变量 ELASTICSEARCH_URL 设置为 http://elasticsearch-logging:9200。这对你有用吗?

      干杯,

      周六

      【讨论】:

      • 不,我知道我可以做到这一点,它使用的是我想知道的 nginx 中可变的环境。
      猜你喜欢
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2018-02-05
      • 2021-12-30
      相关资源
      最近更新 更多