Kubernetes 多容器通信
Kubernetes Multi-container communication
我有一个 node.js 网络应用程序的两个 docker 容器
- 后端服务器
- 前端,依赖后端
我尝试使用 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 和端口?
- 有没有办法在 kubernetes 中使用 localhost:port?
- 如果没有,您能否建议一种部署我的应用程序的理想生产环境的方法?
注意:多容器部署在本地主机 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
我有一个 node.js 网络应用程序的两个 docker 容器
- 后端服务器
- 前端,依赖后端 我尝试使用 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 和端口?
- 有没有办法在 kubernetes 中使用 localhost:port?
- 如果没有,您能否建议一种部署我的应用程序的理想生产环境的方法?
注意:多容器部署在本地主机 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