1. EKS安全组基础概念

安全组是AWS中作用于实例级别的虚拟防火墙

graph TB subgraph VPC subgraph "EKS控制平面" CP[控制平面] end subgraph "集群安全组" CSG[集群安全组<br/>Port 443] end subgraph "节点安全组" NSG[节点安全组<br/>Ports 1025-65535] subgraph "工作节点" WN1[工作节点 1] WN2[工作节点 2] end subgraph "Pods" P1[Pod 1] P2[Pod 2] P3[Pod 3] end end %% Control Plane to Node Communications CP --> |Port 443| CSG CSG --> |Port 443| NSG %% Node-to-Node Communications NSG --> |All Ports| NSG %% Worker Nodes and Pods WN1 --- P1 WN1 --- P2 WN2 --- P3 %% Security Group Rules classDef sgRules fill:#f9f,stroke:#333,stroke-width:2px class CSG,NSG sgRules end style VPC fill:#f5f5f5,stroke:#333,stroke-width:2px

EKS集群中主要涉及两类安全组:

  1. 集群安全组(Cluster Security Group)

  2. 节点安全组(Node Security Group)

graph TB subgraph AWS-Cloud[AWS Cloud] subgraph EKS-Cluster[EKS Cluster] subgraph Cluster-SG[集群安全组] CP[控制平面] end subgraph Node-SG[节点安全组] WN1[工作节点1] WN2[工作节点2] WN3[工作节点3] end end Internet((互联网)) end %% 控制平面与节点通信 CP <-->|TCP 443/10250| WN1 CP <-->|TCP 443/10250| WN2 CP <-->|TCP 443/10250| WN3 %% 节点间通信 WN1 <-->|All Ports| WN2 WN2 <-->|All Ports| WN3 WN1 <-->|All Ports| WN3 %% 外部访问 Internet -->|NodePort\nTCP 30000-32767| Node-SG

2. 集群安全组(Cluster Security Group)

  • 概念:集群安全组就像是 EKS 集群的 “总大门保安”,负责管理进出整个 EKS 集群的 “人员”(网络流量)。它决定了哪些 “人” 可以从外面进入集群,哪些 “人” 可以在集群内部和外部之间走动,主要控制的是 EKS 控制平面和工作节点之间的通信,保证只有被允许的网络流量能在它们之间流动,防止坏人(恶意流量)混进来搞破坏。

  • 举例:假设你有一个大型的工厂园区(EKS 集群),园区有一个管理中心(EKS 控制平面),还有很多生产车间(工作节点)。集群安全组就相当于园区的大门保安,只有持有特定工作证(符合安全组规则的网络流量)的员工、货车等才能进出园区,确保管理中心和各个车间之间的联系是安全的,防止小偷、竞争对手等未经授权的人进入园区搞破坏或窃取信息。

graph LR Internet(Internet) -- "流量" --> NodeSecurityGroup1((节点安全组1)) Internet -- "流量" --> NodeSecurityGroup2((节点安全Group2)) NodeSecurityGroup1 -- "允许流量" --> Node1(EKS 工作节点1) NodeSecurityGroup2 -- "允许流量" --> Node2(EKS 工作节点2) Node1 -- "内部通信" --> Node2 Node2 -- "内部通信" --> Node1 Node1 -- "外部通信" --> ExternalService1(外部服务1) Node2 -- "外部通信" --> ExternalService2(外部服务2)

集群安全组控制EKS控制平面和工作节点之间的通信:

入站规则要求:

  1. - 允许工作节点组安全组的所有入站流量 (TCP 443)

  2. - 允许工作节点组安全组的所有入站流量 (TCP 10250)

出站规则要求:

  1. - 允许所有出站流量

flowchart LR subgraph Cluster-SG[集群安全组] CP[控制平面\nControl Plane] end subgraph Node-SG[节点安全组] WN[工作节点\nWorker Nodes] end WN -->|TCP 443\nKubernetes API| CP WN -->|TCP 10250\nKubelet API| CP CP -->|出站所有流量| WN

3. 节点安全组(Node Security Group)

  • 概念:节点安全组可以看作是每个工作节点的 “专属保安”,主要负责管理进出每个工作节点的网络流量。它决定了哪些流量可以在不同工作节点之间往来,以及工作节点能和哪些外部的设备或服务进行通信,就像给每个工作节点都配备了一个贴身保镖,保护工作节点的安全,让它们只和该联系的对象交流。

  • 举例:还是以刚才的工厂园区为例,每个生产车间(工作节点)都有自己的节点安全组作为专属保安。这些保安会检查每个要进入车间的人和物品,只允许和本车间生产相关的人员、物料等进入。比如,生产手机屏幕的车间,只允许生产屏幕的原材料供应商货车进入,同时也只允许车间把生产好的屏幕发送给指定的手机组装车间,防止其他无关的人或车辆进入车间,避免原材料被盗或生产流程被干扰,保证每个车间自身的生产安全和正常运转,以及车间之间的交互是安全可靠的。

graph LR Internet(Internet) -- "流量" --> SecurityGroup((集群安全组)) SecurityGroup -- "允许流量" --> EKSControlPlane(EKS 控制平面) SecurityGroup -- "允许流量" --> EKSWorkerNodes(EKS 工作节点) EKSControlPlane -- "管理" --> EKSWorkerNodes EKSWorkerNodes -- "通信" --> EKSControlPlane EKSWorkerNodes -- "内部通信" --> EKSWorkerNodes

节点安全组控制工作节点之间以及工作节点与外部的通信:

入站规则要求:

  1. - 允许集群安全组的所有入站流量

  2. - 允许节点间通信 (所有端口)

  3. - 允许 kubelet 通信 (TCP 10250)

  4. - 允许NodePort服务访问 (TCP 30000-32767)

出站规则要求:

  1. - 允许所有出站流量

flowchart LR subgraph Node-SG[节点安全组] WN1[工作节点1] WN2[工作节点2] end subgraph External[外部访问] Client[客户端] end WN1 <-->|所有端口\n节点间通信| WN2 Client -->|TCP 30000-32767\nNodePort服务| WN1 Client -->|TCP 30000-32767\nNodePort服务| WN2 subgraph Cluster-SG[集群安全组] CP[控制平面] end CP -->|所有入站流量| WN1 CP -->|所有入站流量| WN2

4. 最佳实践

  • 最小权限原则

  • 仅开放必要的端口

  • 限制来源IP范围

  • 网络隔离

  • 使用不同的安全组区分不同环境

  • 为不同类型的工作负载配置独立的安全组

  • 定期审计

  • 定期检查安全组规则

  • 移除未使用的规则

5. 常见端口说明

端口

用途

443

Kubernetes API 服务器通信

10250

Kubelet API

30000-32767

NodePort 服务范围

2379-2380

etcd 服务器通信

53

DNS服务通过53端口接收DNS查询请求