2017-07-19 130 views
2

我一直在這個問題上掙扎了幾個小時。我有一個非常簡單的2層dotnet核心骨架應用程序(mvc和webapi),它使用Kubernetes以Windows作爲管絃樂器在Azure上託管。 部署工作正常,我可以通過基本的環境變量。我面臨的挑戰是我無法確定如何將後端服務IP地址傳遞到前端變量。 如果我部署了部署,我可以手動將後端的公開IP傳遞到前端。理想情況下,這需要作爲服務進行部署。Kubernetes前端和後端通信

任何幫助將不勝感激。

部署命令:

1 - kubectl創建-f後端-deploy.yaml

2 - kubectl創建-f後端-service.yaml

3 - kubectl創建-f前端-deploy.yaml

4 - kubectl創建-f前端-service.yaml

後端-deploy.yaml

apiVersion: apps/v1beta1 
 
kind: Deployment 
 
metadata: 
 
    name: acme 
 
spec: 
 
    replicas: 5 
 
    template: 
 
metadata: 
 
    labels: 
 
    app: acme-app 
 
    tier: backend 
 
spec: 
 
    containers: 
 
    - name: backend-container 
 
     image: "some/image" 
 
    imagePullSecrets: 
 
    - name: supersecretkey 
 
     env: 
 
     - name: Config__AppName 
 
     value: "Acme App" 
 
     - name: Config__AppDescription 
 
     value: "Just a backend application" 
 
     - name: Config__AppVersion 
 
     value: "1.0" 
 
     - name: Config__CompanyName 
 
     value: "Acme Trading Limited"

後端-service.yaml

kind: Service 
 
apiVersion: v1 
 
metadata: 
 
    name: acme-app 
 
spec: 
 
    selector: 
 
    app: acme-app 
 
    tier: backend 
 
    ports: 
 
    - protocol: TCP 
 
     port: 80 
 
     targetPort: 80 
 
    type: LoadBalancer

前端德ploy.yaml

apiVersion: apps/v1beta1 
 
kind: Deployment 
 
metadata: 
 
    name: frontend 
 
spec: 
 
    replicas: 2 
 
    template: 
 
    metadata: 
 
     labels: 
 
     app: acme-app 
 
     tier: frontend 
 
    spec: 
 
     containers: 
 
     - name: frontend-container 
 
      image: "some/image" 
 
     imagePullSecrets: 
 
     - name: supersecretkey 
 
      env: 
 
      - name: Config__AppName 
 
      value: "Acme App" 
 
      - name: Config__AppDescription 
 
      value: "Just a frontend application" 
 
      - name: Config__AppVersion 
 
      value: "1.0" 
 
      - name: Config__AppTheme 
 
      value: "fx-theme-black" 
 
      - name: Config__ApiUri 
 
      value: ***THIS IS WHERE I NEED THE BACKEND SERVICE IP*** 
 
      - name: Config__CompanyName 
 
      value: "Acme Trading Limited"

前端-service.yaml

kind: Service 
 
apiVersion: v1 
 
metadata: 
 
    name: frontend 
 
spec: 
 
    selector: 
 
    app: acme 
 
    tier: frontend 
 
    ports: 
 
    - protocol: "TCP" 
 
     port: 80 
 
     targetPort: 80 
 
    type: LoadBalancer

+0

你應該加上'類型:LoadBalancer'你的後端了。這樣,運行你的前端代碼的*用戶瀏覽器就可以連接到它。 – kichik

+0

謝謝。我更新了我的src以反映這一點。 – qdrive

+0

服務作爲env變量暴露在吊艙內。只需連接到正在運行的吊艙並運行'printenv'來確認自己。 – danielepolencic

回答

2

如果你的後端服務是前端莢之前創建的,你應該有環境在吊艙內部的變量ACME_APP_SERVICE_HOSTACME_APP_SEVICE_PORT

如果後端服務是在前端窗格後創建的,則刪除窗格並等待它們重新啓動。新的豆莢應該有這些變量。

檢查環境變量做:

$ kubectl exec podName env 
+1

謝謝你。它使我更近了一步。我現在可以將後端服務的羣集IP地址帶入前端,儘管我現在看到錯誤... *** net :: ERR_CONNECTION_REFUSED ***。我會繼續挖掘,看看發生了什麼事情。 – qdrive