#kubernetes #kubernetes-ingress #nginx-ingress #azure-aks #azure-load-balancer
#кубернетес #kubernetes-вход #вход nginx #лазурный-акс #azure-балансировщик нагрузки
Вопрос:
Стек: Контроллер входа службы Azure Kubernetes
NGINX —https://github.com/kubernetes/ingress-nginx
Контейнеры Docker для балансировки нагрузки AKS
Моя цель — создать кластер K8s, который позволит мне использовать несколько модулей под одним IP-адресом для создания микросервисной архитектуры. После работы с тоннами руководств и документации мне не везет с моей конечной целью. Я дошел до того, что смог получить доступ к одному развертыванию с помощью Loadbalancer, но внедрение ingress пока не увенчалось успехом. Службы разделены на соответствующие файлы для удобства чтения и простоты управления.
Кроме того, контроллер входа был добавлен в мой кластер, как описано в инструкциях по установке с использованием: kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/cloud/deploy.yaml
Балансировщик нагрузки.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
IngressService.yml — Входящий сервис.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-развертывание.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 и развертываний я пытаюсь выполнить веб-запрос к одному из ресурсов api через IP-адрес балансировщика нагрузки и получаю только тайм-аут на мои запросы.
Комментарии:
1. зачем вам нужен loadbalancer.yaml? в развертывании ingress уже есть балансировщик нагрузки, просто используйте существующий lb и получите доступ к IP-адресу lb. кроме того, я не вижу имя хоста под вашим входом, не уверен, что это должно работать
2. Если я не использую Azure Loadbalancer, как мне установить IP-адрес для отправки моих запросов?
3. если это не так — вероятно, нет простого способа, порта узла и общедоступного IP для каждого узла. очень хрупкий
Ответ №1:
Нашел свой ответ после достаточного поиска. По сути, проблема заключалась в том, что контроллер входа имеет балансировщик нагрузки, встроенный в yaml, как упоминалось в комментариях выше. Однако селектор для этого балансировщика нагрузки требует пометки вашей службы входа как части класса. Затем эта служба входа указывает на каждую из служб, подключенных к вашим модулям. Мне также пришлось внести небольшую модификацию, чтобы разрешить использование статического IP-адреса в предоставленном балансировщике нагрузки.