2017-02-04 32 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