1. 深入解析Nginx Ingress Controller的部署架构
在Kubernetes集群中,Nginx Ingress Controller作为流量入口的核心组件,其部署过程涉及多个Kubernetes原生资源的协同工作。今天我将带大家深入剖析官方Ingress-Nginx控制器的YAML定义,揭示每个配置项背后的设计意图和实现原理。
1.1 基础命名空间与服务账户
部署的第一步是创建专用的命名空间和ServiceAccount。这个隔离的设计体现了Kubernetes的最佳实践:
yaml复制apiVersion: v1
kind: Namespace
metadata:
name: ingress-nginx
labels:
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
命名空间的标签系统不仅用于标识,还为后续的RBAC授权提供了筛选依据。紧接着创建的两个ServiceAccount(ingress-nginx和ingress-nginx-admission)分别服务于主控制器和证书管理任务。
关键细节:当
automountServiceAccountToken: true时,kube-controller-manager会在Pod调度时自动生成JWT令牌并挂载到/var/run/secrets/kubernetes.io/serviceaccount/。这个设计既保证了安全性(按需生成),又简化了配置流程。
1.2 细粒度的RBAC权限控制
权限系统是Ingress Controller安全运行的基石。官方YAML中定义了多层次的访问控制:
yaml复制apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ingress-nginx
rules:
- apiGroups: [""]
resources: ["configmaps", "endpoints", "nodes", "pods", "secrets"]
verbs: ["list
