为保障部署在集群中的业务安全,容器服务集群支持多种类型的网络安全措施,包括网络策略、安全组、服务网格和网络加密。本文介绍常见网络安全策略的配置方式和使用场景。
网络安全概述
容器服务集群中的网络安全措施,主要包括:流量管制和网络加密。VKE 集群中提供多种功能支持上述网络安全措施。如下表所示。
策略对比
使用场景
在集群中使用 Kubernetes 网络策略和安全组进行流量管制,适用于不同的场景,详情如下表所示。
关键区别
Kubernetes 网络策略和安全组的主要区别,如下表所示。
网络策略(NetworkPolicy)
在 Kubernetes 集群中,默认情况下允许所有 Pod 到 Pod 的通信。尽管这种灵活性可能有助于降低网络复杂度,但它并不安全。Kubernetes 网络策略为您提供了一种机制,用于限制 Pod 之间的网络流量(通常称为 东西向流量)以及 Pod 和外部服务之间的网络流量。
Kubernetes 网络策略在开放系统互连(OSI)模型的第 3 层和第 4 层运行。网络策略使用 Pod、命名空间选择器和标签来识别源和目标 Pod,同时也可以包括 IP 地址、端口号、协议或这些内容的组合。网络策略可以应用于 Pod 的入站或出站连接,通常称为入口规则和出口规则。Kubernetes 网络策略需集群 CNI 插件支持,VKE 通过 VPC-CNI 插件原生集成此能力。
说明
仅 VPC-CNI 网络集群支持配置网络策略,Flannel 网络集群暂不支持。
借助 VPC-CNI 插件对原生网络策略的支持,您可以配置网络策略来保护 Kubernetes 集群中的网络流量。它与上游的 Kubernetes 网络策略 API 集成,可确保兼容和遵守 Kubernetes 标准。您可以使用上游 API 支持的不同 标识符 来定义策略。默认情况下,所有入口和出口流量都允许进入一个 Pod。当指定带有 PolicyType Ingress 的网络策略时,只有来自容器节点的连接和入口规则允许的连接才能连接到 Pod。同样适用于出口规则。如果定义了多条规则,则在做出决定时会考虑所有规则的并集,顺序不会影响整体策略结果。 注意
- 【邀测·申请试用】:VKE 的网络策略(NetworkPolicy)功能目前处于邀测阶段,如需使用,请提交申请。
- VCI 暂不支持网络策略,请勿在包含了 VCI 实例的集群中使用网络策略。可能会导致系统服务不可用。
网络策略入门
当使用网络策略管控集群中的 Pod 流量时,常见的最佳实践是采用 最低权限原则,即首先禁止所有的 Pod 出站流量和入站流量,然后根据需求逐步放开指定的流量,实现集群中 Pod 流量的最小化原则。具体的操作流程,如下所示:
步骤一:创建默认拒绝策略
与 RBAC 策略一样,建议在网络策略中遵循最低权限访问原则。首先创建一个 全部拒绝 的策略,该策略限制命名空间中的所有入站和出站流量。
apiVersion: networking.k8s.io/v1
步骤二:创建允许 DNS 查询的规则
当您配置了 全部拒绝 规则后,就可以开始对其他流量进行按需放行,例如允许 Pod 查询 CoreDNS 以获取名称解析。
apiVersion: networking.k8s.io/v1
kubernetes.io/metadata.name: kube-system
步骤三:逐步添加规则以选择性地允许命名空间/容器之间的流量流动
了解应用程序要求并根据需要创建细粒度的入口和出口规则。本例中以只允许 client-app 访问 backend-app 的 80 端口为例,这有助于最大限度地减少攻击面并降低未经授权访问的风险。
apiVersion: networking.k8s.io/v1
name: allow-ingress-backend
推荐工具
当您配置和使用网络策略时,可以使用以下常见的工具,学习、编写和验证网络策略的正确性和有效性。
安全组
安全组是火山引擎 VPC 提供的安全策略。安全组由一系列安全组规则组成,用于控制网卡的出入流量,每张网卡必须加入安全组。安全组基于白名单原理设计,故网卡的流量必须被安全组允许才会放通。
网络加密
配置 HTTPS 类型的外部负载均衡器(Service 层)
配置 Service 时基于如下注解,能够快速部署 HTTPS 加密的负载均衡器。
方案优势:
- 全链路加密:通过 HTTPS 保护用户到负载均衡器的流量,避免中间人攻击。
- 自动化管理:集成火山引擎 CLB 的证书服务,支持证书自动续期与绑定。
配置 HTTPS 类型的 Ingress
通过 Ingress 资源实现七层路由的 HTTPS 加密,适用于复杂路由场景(如多域名、多路径)。
前提条件
配置步骤
使用如下 YAML 配置,创建 HTTPS 类型的 ALB Ingress。
apiVersion: networking.k8s.io/v1
ingress.vke.volcengine.com/loadbalancer-port: "443"
ingress.vke.volcengine.com/loadbalancer-protocol: "https"
方案优势:
- 统一入口加密:集中管理多服务的 HTTPS 流量,降低配置复杂度。
- 灵活路由策略:支持按域名/路径分流,同时保障加密安全。
注意
- 证书管理:定期轮换证书并监控有效期,避免因证书过期导致服务中断,推荐使用火山引擎 证书中心 托管 SSL 证书。
- 混合协议场景:若需同时支持 HTTP 和 HTTPS,建议通过protocol-port注解配置自动重定向(HTTP > HTTPS)。