Получение IP в переменную env через DNS в kubernetes

Я пытаюсь разобраться с К8, идущими из docker compose, Я хотел бы настроить мой первый модуль с двумя контейнерами, которые я поместил в реестр. Следующий вопрос:

Как мне получить IP через DNS в переменную окружения, чтобы регистратор мог подключиться к консулу? Смотрите контейнерный регистратор в args consul://consul:8500, Консул должен быть изменен с 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"
      }
    ]
  }
}

1 ответ

Решение

Предоставление модулей другим приложениям осуществляется с помощью службы в Кубернетесе. После того как вы определили службу, вы можете использовать переменные среды, связанные с этими службами, в ваших модулях. Экспонировать стручок напрямую не очень хорошая идея, так как стручки могут быть перенесены.

Например, при использовании такой службы:

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

В любом случае, кажется, что другие перестали использовать переменные окружения по некоторым причинам, как описано здесь.

Другие вопросы по тегам