堆栈:Azure Kubernetes服务
NGINX入口控制器-https://github.com/kubernetes/ingress-nginx
AKS负载均衡器
Docker容器
我的目标是创建一个K8s集群,允许我在一个IP下使用多个pod来创建微服务架构。在处理了大量的教程和文档之后,我的最终目标没有任何运气。我已经到了能够使用Loadbalancer访问单个部署的地步,但到目前为止,引入入口还没有成功。为了可读性和易于控制,服务被分离到各自的文件中。
此外,如安装说明中所述,入口控制器已添加到我的集群中,使用:kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/cloud/deploy.yaml
LoadBalancer.yml:
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
loadBalancerIP: x.x.x.x
selector:
app: ingress-service
tier: backend
ports:
- name: "default"
port: 80
targetPort: 80
type: LoadBalancer
入口服务.yml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /api
backend:
serviceName: api-service
servicePort: 80
api-deployml.yml
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: api
ports:
- port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
selector:
matchLabels:
app: api
tier: backend
track: stable
replicas: 1
template:
metadata:
labels:
app: api
tier: backend
track: stable
spec:
containers:
- name: api
image: image:tag
ports:
- containerPort: 80
imagePullPolicy: Always
imagePullSecrets:
- name: SECRET
图像中的API正确地暴露在端口80上。
在应用了上述每个yml服务和部署之后,我尝试通过LoadBalancer的IP向其中一个api资源发出web请求,但我的请求只会超时。
在四处寻找后找到了我的答案。基本上,问题是入口控制器在yaml中内置了一个负载均衡器,正如上面的评论中所提到的。但是,LoadBalancer的选择器需要将Ingress服务标记为类的一部分。然后,Ingress服务指向连接到您的pod的每个服务。我还必须做一个小的修改,以允许在提供的负载均衡器中使用静态IP。