Ingress Controllers 是 Kubernetes 中管理 Ingress 资源的关键组件,可让您定义如何将外部 HTTP/S 流量路由到您的服务。它们是连接外部世界和内部 Kubernetes 服务的桥梁。


下面的示例演示了如何部署 NGINX Ingress Controller,它是 Kubernetes 中最常用的 Ingress Controller 之一。

【代码清单】

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-ingress-controller
 namespace: kube-system
spec:
 replicas: 1
 selector:
  matchLabels:
   app: nginx-ingress
 template:
  metadata:
   labels:
     app: nginx-ingress
  spec:
   containers:
   - name: nginx-ingress-controller
     image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
     args:
     - /nginx-ingress-controller
     - --configmap=$(POD_NAMESPACE)/nginx-configuration
     - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
     - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
     - --default-backend-service=$(POD_NAMESPACE)/default-backend
     env:
     - name: POD_NAMESPACE
      valueFrom:
       fieldRef:
        fieldPath: metadata.namespace

【执行结果】

部署命令不会直接显示输出结果,但可以通过运行
kubectl get pods -n kube-system
你应该能看到 nginx-ingress-controller pod 正在运行。

NGINX Ingress Controller 处理在集群中定义的 Ingress 资源。Ingress 资源指定了根据请求的主机和路径将 HTTP/S 流量路由到不同服务的规则。例如,你可以将 example.com/api 的流量路由到一个服务,而将 example.com/app 的流量路由到另一个服务。

要有效使用 Ingress,必须以 YAML 格式定义 Ingress 资源,然后将其应用于群集。Ingress 控制器会监控这些资源,并对底层 NGINX 服务器进行相应配置。

下面是一个 Ingress 资源的简单示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /app
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80

【小知识】

Ingress Controllers 可以处理 SSL 终止,让您可以使用 HTTPS 确保应用程序的安全。

有多种 Ingress 控制器可供选择,包括 NGINX、Traefik 和 HAProxy,每种控制器都有独特的功能和配置。

Ingress 资源还可用于设置负载平衡和基于路径的路由,从而提高 Kubernetes 应用程序的灵活性。