2017-07-19 137 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