我有一个node.js web应用程序的两个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,部署后集群中的公共ip在运行时分配,我如何将此服务器ip配置到我的前端,使其侦听特定的ip和端口?
- 是否有办法在kubernetes中使用localhost:port ?
- 如果没有,你能建议一种方法来部署我的应用程序理想的生产环境?
注意:多容器部署在本地主机docker环境和azure容器实例上运行良好
使用docker桌面
我已经在这个问题上挣扎了一段时间了,如果有人能指导我解决这个问题会很有帮助的!谢谢你的意见
部署。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 Service允许前端应用程序使用服务名称("cspback")访问后端。设置interfaceURL为'http://cspback/api/'
将targetPort添加到Service配置
apiVersion: v1
kind: Service
metadata:
name: cspback
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: cspback
如果你想从前端使用端口3000,请将端口和interfaceURL更新为3000。
查看更多详细信息:https://kubernetes.io/docs/concepts/services-networking/service/
经过几次尝试后,我能够找出解决方案,希望这对有类似用例的人有所帮助:
我在kubernetes部署yaml文件中创建了一个LoadBalancer类型的服务器服务,这样所有的服务器pod请求都将通过这个cspbackserver-service路由,我们需要为LoadBalancer类型设置一个静态ip。
注意:在Azure上,如果你想使用用户指定的公共类型loadBalancerIP,你首先需要创建一个静态类型的公共IP地址资源。这解决了每次我们在AKS上部署更改时向kube pod分配新ip的问题。
部署。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