Ingress概述

Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP和HTTPS。
Ingress 可以提供负载均衡、SSL 和基于名称的虚拟托管。
必须具有 ingress 控制器【例如 ingress-nginx】才能满足 Ingress 的要求。仅创建 Ingress 资源无效。

Ingress 是什么

Ingress 公开了从集群外部到集群内 services 的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。可以将 Ingress 配置为提供服务外部可访问的 URL、负载均衡流量、 SSL / TLS,以及提供基于名称的虚拟主机。Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。
Ingress 不会公开任意端口或协议。若将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或者 Service.Type=LoadBalancer 类型的服务
图片.png

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: web-ingress
  5. namespace: linkerd-viz
  6. annotations:
  7. nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084
  8. nginx.ingress.kubernetes.io/configuration-snippet: |
  9. proxy_set_header Origin "";
  10. proxy_hide_header l5d-remote-ip;
  11. proxy_hide_header l5d-server-id;
  12. nginx.ingress.kubernetes.io/auth-type: basic
  13. nginx.ingress.kubernetes.io/auth-secret: web-ingress-auth
  14. nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
  15. spec:
  16. ingressClassName: nginx
  17. rules:
  18. - host: dashboard.alpha666.top
  19. http:
  20. paths:
  21. - path: /
  22. pathType: Prefix
  23. backend:
  24. service:
  25. name: web
  26. port:
  27. number: 8084

Ingress Controller是什么
为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。 NGINX Ingress Controller 是由 Kubernetes 提供支持和维护的一个控制器。Ingress Controller 这东西就是解决 “Nginx 的处理方式” 的;Ingress Controoler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取他,按照他自己模板生成一段 Nginx 配置,再写到 Nginx Pod 里,最后 reload 一下.

$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/nginx-ingress-controller

Ingress Class 是什么
Ingress Class是一个 k8s对象,用于绑定ingress controller ,设置ingress的时候 直接绑定 ingress class即可。
其中重要的属性是 metadata.name 和 spec.controller,前者是这个 IngressClass 的名称,需要设定在 Ingress 中,后者是 Ingress Controller 的名称。
Ingress 中的 spec.ingressClassName 属性,可以用来指定对应的 IngressClass,并进而由 IngressClass 关联到对应的 Ingress Controller

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  annotations:
    meta.helm.sh/release-name: nginx-ingress
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2021-12-23T14:12:56Z"
  generation: 1
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: nginx-ingress
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: nginx-ingress-controller
    helm.sh/chart: nginx-ingress-controller-9.0.9
  name: nginx
  resourceVersion: "4601323"
  uid: 6c39229b-4535-4dfd-bbde-6c3006ffa73e
spec:
  controller: k8s.io/ingress-nginx