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集群中主要涉及两类安全组:
集群安全组(Cluster Security Group)
节点安全组(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-SG2. 集群安全组(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控制平面和工作节点之间的通信:
入站规则要求:
- 允许工作节点组安全组的所有入站流量 (TCP 443)
- 允许工作节点组安全组的所有入站流量 (TCP 10250)
出站规则要求:
- 允许所有出站流量
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 -->|出站所有流量| WN3. 节点安全组(Node Security Group)
概念:节点安全组可以看作是每个工作节点的 “专属保安”,主要负责管理进出每个工作节点的网络流量。它决定了哪些流量可以在不同工作节点之间往来,以及工作节点能和哪些外部的设备或服务进行通信,就像给每个工作节点都配备了一个贴身保镖,保护工作节点的安全,让它们只和该联系的对象交流。
举例:还是以刚才的工厂园区为例,每个生产车间(工作节点)都有自己的节点安全组作为专属保安。这些保安会检查每个要进入车间的人和物品,只允许和本车间生产相关的人员、物料等进入。比如,生产手机屏幕的车间,只允许生产屏幕的原材料供应商货车进入,同时也只允许车间把生产好的屏幕发送给指定的手机组装车间,防止其他无关的人或车辆进入车间,避免原材料被盗或生产流程被干扰,保证每个车间自身的生产安全和正常运转,以及车间之间的交互是安全可靠的。
graph LR
Internet(Internet) -- "流量" --> SecurityGroup((集群安全组))
SecurityGroup -- "允许流量" --> EKSControlPlane(EKS 控制平面)
SecurityGroup -- "允许流量" --> EKSWorkerNodes(EKS 工作节点)
EKSControlPlane -- "管理" --> EKSWorkerNodes
EKSWorkerNodes -- "通信" --> EKSControlPlane
EKSWorkerNodes -- "内部通信" --> EKSWorkerNodes节点安全组控制工作节点之间以及工作节点与外部的通信:
入站规则要求:
- 允许集群安全组的所有入站流量
- 允许节点间通信 (所有端口)
- 允许 kubelet 通信 (TCP 10250)
- 允许NodePort服务访问 (TCP 30000-32767)
出站规则要求:
- 允许所有出站流量
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 -->|所有入站流量| WN24. 最佳实践
最小权限原则
仅开放必要的端口
限制来源IP范围
网络隔离
使用不同的安全组区分不同环境
为不同类型的工作负载配置独立的安全组
定期审计
定期检查安全组规则
移除未使用的规则
5. 常见端口说明
端口 | 用途 |
---|
443 | Kubernetes API 服务器通信 |
10250 | Kubelet API |
30000-32767 | NodePort 服务范围 |
2379-2380 | etcd 服务器通信 |
53 | DNS服务通过53端口接收DNS查询请求 |