Kubernetes 多容器通信

Kubernetes Multi-container communication

我有一个 node.js 网络应用程序的两个 docker 容器

  1. 后端服务器
  2. 前端,依赖后端 我尝试使用 azure kubernetes 服务托管容器,但无法将它们连接到网络中。

Envionment.Prod.ts需要后端连接的前端文件:

export const environment = {
  production: true,
  domainURL: window.location.host,
  interfaceURL: 'http://52.224.xx.xx:3000/api/',
  assetURL: 'assets',
  name: 'prod'
};

如您所见,我的服务器在 http://localhost_or_public_ip:3000/api/ 上侦听 前端容器需要连接到服务器。

使用 AKS,public 部署后集群中的 ip 在 运行 时间分配,我如何将此服务器 ip 配置到我的前端以使其侦听特定的 ip 和端口?

  1. 有没有办法在 kubernetes 中使用 localhost:port?
  2. 如果没有,您能否建议一种部署我的应用程序的理想生产环境的方法?

注意:多容器部署在本地主机 docker 环境和 azure 容器实例上运行良好

使用 docker 桌面 windows

我已经为这个问题苦苦挣扎了一段时间,如果有人能指导我解决这个问题,那将很有帮助! 感谢您的意见

Deployment.yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cspback
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cspback
  template:
    metadata:
      labels:
        app: cspback
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: cspback
        image: [azure_registry].azurecr.io/backend:latest
        env:
        
        ports:
        - containerPort: 3000
      
---
apiVersion: v1
kind: Service
metadata:
  name: cspback
spec:
  ports:
  - port: 3000
  selector:
    app: cspback
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cspfront
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cspfront
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5 
  template:
    metadata:
      labels:
        app: cspfront
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: cspfront
        image: [azure_registry].azurecr.io/frontend:v1
        ports:
        - containerPort: 86
        resources:
          requests:
            cpu: 250m
          limits:
            cpu: 500m
       
      imagePullSecrets:
        - name: secretupdate
---
apiVersion: v1
kind: Service
metadata:
  name: cspfront
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: cspfront

k8s 服务使前端应用程序能够使用服务名称(“cspback”)访问后端。将接口 URL 设置为 'http://cspback/api/'

将目标端口添加到服务配置

apiVersion: v1
kind: Service
metadata:
  name: cspback
spec:
  ports:
  - port: 80
    targetPort: 3000
  selector:
    app: cspback

如果您特定于从前端使用端口 3000,请将端口和接口 URL 更新为 3000。

了解更多详情: https://kubernetes.io/docs/concepts/services-networking/service/

经过几次尝试,我找到了解决方案,希望这能帮助有类似用例的人使用:

我在 kubernetes 部署 yaml 文件中创建了一个类型为 LoadBalancer 的服务器服务,以便所有服务器 pod 请求都将通过此 cspbackserver-service 路由,我们需要为负载均衡器类型设置一个静态 ip。

注意:在Azure上,如果要使用用户指定的public类型的loadBalancerIP,首先需要创建一个静态类型的public IP地址资源。 这解决了每次我们在 AKS

上部署更改时将新 ips 分配给 kube pods 的问题

Deployment.yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
  labels:
    app: cspback
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cspback
  template:
    metadata:
      labels:
        app: cspback
    spec:
      containers:
      - name: cspback
        image: __cspback__  
        ports:
        - containerPort: 3000
         
---
apiVersion: v1
kind: Service
metadata:
  name: cspbackserver-service
spec:
  selector:
    app: cspbackend
  type: LoadBalancer
  loadBalancerIP: 10.0.171.239 //sample_ip
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 9457
      nodePort: 30008