2017-02-04 15 views
1

Я пытаюсь раздобыть голову вокруг K8s, начиная от docker compose. Я хотел бы настроить мой первый контейнер с двумя контейнерами, которые я нажал в реестр. Следующий вопрос:Получение IP в переменную env через DNS в kubernetes

Как получить 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" 
     } 
    ] 
    } 
} 

ответ

0

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

Когда, например, используя услугу, как это:

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