2017-02-04 67 views
1

我试图让我的头绕过来自docker compose的K8s。我想设置我的第一个荚与我推到注册表的两个容器。以下问题:通过kubernetes中的DNS将IP转换为env变量

如何通过DNS将IP获取到环境变量中,以便注册人可以连接到consul?请参阅容器注册表参数consul://consul:8500。领事需要改变环境。

{ 
    "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

向Kubernetes的Service公开其他的应用程序。一旦你定义了一个服务,你可以在你的pod中使用与该服务相关的环境变量。直接揭示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