2017-02-27 19 views
0

我正在嘗試配置kubernetes,並在我的項目中分離了UI和API。 我創建了一個Pod,並將兩者都公開爲服務。Kubernetes服務作爲env var到前端使用

如何在pod.yaml配置中設置API_URL以發送來自用戶瀏覽器的請求?

我不能使用本地主機,因爲通信不在容器之間。

pod.yaml

apiVersion: v1 
kind: Pod 
metadata: 
    name: project 
    labels: 
    name: project 
spec: 
    containers: 
    - image: 'ui:v1' 
    name: ui 
    ports: 
    - name: ui 
     containerPort: 5003 
     hostPort: 5003 
    env: 
    - name: API_URL 
     value: <how can I set the API address here?> 
    - image: 'api:v1' 
    name: api 
    ports: 
    - name: api 
     containerPort: 5000 
     hostPort: 5000 
    env: 
    - name: DATABASE_URL 
     valueFrom: 
     secretKeyRef: 
     name: postgres-url 
     key: url 

services.yaml

apiVersion: v1 
kind: Service 
metadata: 
    name: api 
    labels: 
    name: api 
spec: 
    type: NodePort 
    ports: 
    - name: 'http' 
    protocol: 'TCP' 
    port: 5000 
    targetPort: 5000 
    nodePort: 30001 
    selector: 
    name: project 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: ui 
    labels: 
    name: ui 
spec: 
    type: NodePort 
    ports: 
    - name: 'http' 
    protocol: 'TCP' 
    port: 80 
    targetPort: 5003 
    nodePort: 30003 
    selector: 
    name: project 

回答

0

我創建了一個Ingress來解決這個問題,並指向DNS而不是IP。

ingres.yaml

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: project 
spec: 
    tls: 
    - secretName: tls 
    backend: 
    serviceName: ui 
    servicePort: 5003 
    rules: 
    - host: www.project.com 
    http: 
     paths: 
     - backend: 
      serviceName: ui 
      servicePort: 5003 
    - host: api.project.com 
    http: 
     paths: 
     - backend: 
      serviceName: api 
      servicePort: 5000 

deployment.yaml

apiVersion: v1 
kind: Pod 
metadata: 
    name: project 
    labels: 
    name: project 
spec: 
    containers: 
    - image: 'ui:v1' 
    name: ui 
    ports: 
    - name: ui 
     containerPort: 5003 
     hostPort: 5003 
    env: 
    - name: API_URL 
     value: https://api.project.com 
    - image: 'api:v1' 
    name: api 
    ports: 
    - name: api 
     containerPort: 5000 
     hostPort: 5000 
    env: 
    - name: DATABASE_URL 
     valueFrom: 
     secretKeyRef: 
     name: postgres-url 
     key: url 
1

服務IP在羣內的環境變量已經可用,因爲Kubernetes初始化爲每個服務一組環境變量的那在那個時刻存在。

要列出一個吊艙

kubectl exec <pod-name> env 

的所有環境變量如果吊艙則必須刪除並重新創建服務之前創建的。

由於您將服務命名爲api,因此上述命令應列出的其中一個變量爲API_SERVICE_HOST

但是你並不需要查找環境變量中的服務IP地址。您可以簡單地使用服務名稱作爲主機名。任何pod都可以連接到服務api,只需撥打api.default.svc.cluster(假設您的服務位於default命名空間中)。

+0

但它是一個內部IP'API_SERVICE_HOST = 10.0.0.8',我需要暴露一個'192.168.99.100:PORT'。因爲我將這個設置在web應用程序中供瀏覽器使用。謝謝! –

相關問題