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 应用程序的灵活性。