0-Предисловие
Недавно в процессе работы над Ingress Controller и проверки информации я обнаружил, что легко спутать понимание Ingress и Ingress Controller. Записывайте, пока горячо, для себя в будущем.
1-Ingress
Kubernetes Ingress is an API object that provides routing rules to manage external users' access to the services in a Kubernetes cluster.
Ingress определяет правила маршрутизации: правила маршрутизации для HTTP и HTTPS снаружи кластера --> внутри кластера.
На следующем рисунке показан пример переадресации внешних запросов к Сервису через правила маршрутизации Ingress, а затем Сервис распределяется по разным подам в соответствии с меткой Selector:
Пример входного yaml-файла:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: conn-dev
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: dev.xxx.com
http:
paths:
- path: / # 该配置表示将dev.xxx.com的请求转发到serviceName为nginx,servicePort为80的服务上
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
Пример файла yaml развертывания и обслуживания Nginx:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
labels:
app: nginx
name: nginx
namespace: conn-dev
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: conn-dev
spec:
selector:
app: nginx # 这里的spec.selector要和deploy里的metadata.labels保持一致
ports:
- protocol: TCP
port: 80
targetPort: 80
Уведомление:
- Spec.selector в сервисе должен соответствовать метаданным.labels в деплое, потому что svc находит соответствующие pod’ы по меткам.
- Существует три типа ingress.spec.rules.http.paths.pathType: точный, префикс, реализация, см. подробности.здесь
2-Ingress Controller
If Kubernetes Ingress is the API object that provides routing rules to manage external access to services, Ingress Controller is the actual implementation of the Ingress API. The Ingress Controller is usually a load balancer for routing external traffic to your Kubernetes cluster and is responsible for L4-L7 Network Services.
Личное понимание:
- С одной стороны: входной контроллер, как и его имя, является приложением, которое контролирует и управляет входными ресурсами.Когда вход развертывается в кластере (под любым именем), входной контроллер захватывает входной ресурс и настраивает его в соответствии с определенным правилам на соответствующие внутренние компоненты. Его часто используемым внутренним компонентом является nginx.
- С другой стороны, с точки зрения nginx, входной контроллер также является обратным прокси.Внешние запросы через входной контроллер получают входящие ресурсы в кластере (настраивается через kind:ingress) и перенаправляют их на разные службы к их правилам URL (аналог файлов конфигурации nginx и nginx.conf)
Развертывание 3-входного контроллера
ВидетьРазвертывание входящего контроллера