【问题标题】:Getting IP into env variable via DNS in kubernetes通过 kubernetes 中的 DNS 将 IP 获取到环境变量
【发布时间】:2017-06-21 20:50:41
【问题描述】:

我正试图了解来自docker compose 的 K8s。我想用我推送到注册表的两个容器来设置我的第一个 pod。以下问题:

如何通过 DNS 将 IP 获取到环境变量中,以便注册者可以连接到 consul?请参阅 args consul://consul:8500 中的容器注册器。 consul 需要用 env 来改变。

{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "service-discovery",
    "labels": {
      "name": "service-discovery"
    }
  },
  "spec": {
    "containers": [
      {
        "name": "consul",
        "image": "eu.gcr.io/{myproject}/consul",
        "args": [
          "-server",
          "-bootstrap",
          "-advertise=$(MY_POD_IP)"
        ],
        "env": [{
          "name": "MY_POD_IP",
          "valueFrom": {
            "fieldRef": {
              "fieldPath": "status.podIP"
            }
          }
        }],
        "imagePullPolicy": "IfNotPresent",
        "ports": [
          {
            "containerPort": 8300,
            "name": "server"
          },
          {
            "containerPort": 8400,
            "name": "alt-port"
          },
          {
            "containerPort": 8500,
            "name": "ui-port"
          },
          {
            "containerPort": 53,
            "name": "udp-port"
          },
          {
            "containerPort": 8443,
            "name": "https-port"
          }
        ]
      },
      {
        "name": "registrator",
        "image": "eu.gcr.io/{myproject}/registrator",
        "args": [
          "-internal",
          "-ip=$(MY_POD_IP)",
          "consul://consul:8500"
        ],
        "env": [{
          "name": "MY_POD_IP",
          "valueFrom": {
            "fieldRef": {
              "fieldPath": "status.podIP"
            }
          }
        }],
        "imagePullPolicy": "Always"
      }
    ]
  }
}

【问题讨论】:

    标签: kubernetes consul registrator


    【解决方案1】:

    在 Kubernetes 中使用 Service 将 pod 暴露给其他应用程序。定义服务后,您可以在 pod 中使用与该服务相关的环境变量。直接暴露 Pod 不是一个好主意,因为 Pod 可能会被重新调度。

    例如当使用这样的服务:

    apiVersion: v1
    kind: Service
    metadata:
      name: consul
      namespace: kube-system
      labels:
        name: consul
    spec:
      ports:
        - name: http
          port: 8500
        - name: rpc
          port: 8400
        - name: serflan
          port: 8301
        - name: serfwan
          port: 8302
        - name: server
          port: 8300
        - name: consuldns
          port: 8600
      selector:
        app: consul
    

    相关的环境变量为CONSUL_SERVICE_IP

    无论如何,由于here 所述的某些原因,其他人似乎实际上停止使用该环境变量

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 2021-09-29
      • 2020-03-30
      • 2015-11-19
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      相关资源
      最近更新 更多