Понимание Ingress и Ingress Controller

Kubernetes

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-входного контроллера

ВидетьРазвертывание входящего контроллера

I-References