You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
安全
集群网络安全最佳实践
复制全文
下载 pdf
集群网络安全最佳实践
为保障部署在集群中的业务安全,容器服务集群支持多种类型的网络安全措施,包括网络策略、安全组、服务网格和网络加密。本文介绍常见网络安全策略的配置方式和使用场景。
网络安全概述
容器服务集群中的网络安全措施,主要包括:流量管制和网络加密。VKE 集群中提供多种功能支持上述网络安全措施。如下表所示。
网络安全策略
说明
流量管制
指限制服务之间网络流量的规则。主要功能包括:网络策略和安全组。
网络加密
指对传输中的流量进行加密。主要功能包括:入口控制器和负载均衡器、服务网格。
策略对比
使用场景
在集群中使用 Kubernetes 网络策略和安全组进行流量管制,适用于不同的场景,详情如下表所示。
安全策略
使用场景
Kubernetes 网络策略
控制集群中 Pod 到 Pod 的流量。
  • 适用于管理集群内部 Pod 之间的通信(东西向流量)。
  • 在 IP 地址或端口级别(OSI 第 3 层或第 4 层)控制流量。
安全组
  • 利用现有的火山引擎网络隔离能力:如果您已通过复杂的安全组管理火山引擎上的服务访问权限,且正在将应用从云服务器(ECS)迁移到 VKE,安全组是理想选择。它允许复用现有安全组资源并应用到集群中,减少现有的网络架构改动。
  • 控制对火山引擎云服务的访问:当集群中的应用需要与火山引擎其他云服务通信时,可以使用安全组对通信流量进行管控。
关键区别
Kubernetes 网络策略和安全组的主要区别,如下表所示。
对比项
Kubernetes 网络策略
火山引擎 VPC 安全组
流量类型
集群内部东西向流量
控制 Pod 与私有网络(VPC)内资源(如 ECS、RDS)及公网的通信
控制层级
OSI 第 3/4 层(IP/端口)
基于火山引擎 VPC 安全组规则
适用场景
微服务间隔离
混合云架构或者和火山引擎云服务互访
生效范围
集群内 Pod
VPC 内所有资源
网络策略(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
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
步骤二:创建允许 DNS 查询的规则
当您配置了 全部拒绝 规则后,就可以开始对其他流量进行按需放行,例如允许 Pod 查询 CoreDNS 以获取名称解析。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns-access
namespace: default
spec:
podSelector:
matchLabels: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
步骤三:逐步添加规则以选择性地允许命名空间/容器之间的流量流动
了解应用程序要求并根据需要创建细粒度的入口和出口规则。本例中以只允许 client-app 访问 backend-app 的 80 端口为例,这有助于最大限度地减少攻击面并降低未经授权访问的风险。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-backend
namespace: default
spec:
podSelector:
matchLabels:
k8s-app: backend-app
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
k8s-app: client-app
ports:
- protocol: TCP
port: 80
推荐工具
当您配置和使用网络策略时,可以使用以下常见的工具,学习、编写和验证网络策略的正确性和有效性。
工具地址
工具说明
https://networkpolicy.io/
交互式的 Kubernetes 网络策略(NetworkPolicy)可视化编辑和学习工具。
https://orca.tufin.io/netpol/
https://editor.networkpolicy.io/
可视化编辑器,帮助您编写和测试网络策略。
https://github.com/ahmetb/kubernetes-network-policy-recipes
GitHub 仓库,提供了大量 Kubernetes 网络策略示例,涵盖常见使用场景,如限制流量、隔离命名空间等。
https://kubernetes.io/docs/concepts/services-networking/network-policies/
Kubernetes 官方文档,介绍了网络策略的基本概念、使用方法和示例。
安全组
安全组是火山引擎 VPC 提供的安全策略。安全组由一系列安全组规则组成,用于控制网卡的出入流量,每张网卡必须加入安全组。安全组基于白名单原理设计,故网卡的流量必须被安全组允许才会放通。
说明
在容器服务中配置安全组的最佳实践,请参见 安全组配置最佳实践
网络加密
配置 HTTPS 类型的外部负载均衡器(Service 层)
配置 Service 时基于如下注解,能够快速部署 HTTPS 加密的负载均衡器。
注解字段
字段类型
示例值
默认值
说明
service.beta.kubernetes.io/volcengine-loadbalancer-protocol-port
JSON
HTTP:80,HTTPS:443
定义负载均衡器监听的协议与端口(HTTP 用于自动重定向至 HTTPS)。
service.beta.kubernetes.io/volcengine-loadbalancer-cert-source
String
clb
clb
指定证书来源为火山引擎负载均衡器(CLB),需提前在火山引擎控制台上传证书。
service.beta.kubernetes.io/volcengine-loadbalancer-cert-id
String
cert-xxxxxx(实际证书ID)
绑定已预配置的 HTTPS 证书,确保传输层加密。
说明
负载均衡服务的配置详情,请参考 使用 Annotation 配置 CLB 负载均衡服务
方案优势:
  • 全链路加密:通过 HTTPS 保护用户到负载均衡器的流量,避免中间人攻击。
  • 自动化管理:集成火山引擎 CLB 的证书服务,支持证书自动续期与绑定。
配置 HTTPS 类型的 Ingress
通过 Ingress 资源实现七层路由的 HTTPS 加密,适用于复杂路由场景(如多域名、多路径)。
前提条件
配置步骤
使用如下 YAML 配置,创建 HTTPS 类型的 ALB Ingress。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress-demo # 路由规则的名称
namespace: default # 路由规则所属的命名空间
annotations:
ingress.vke.volcengine.com/loadbalancer-port: "443" # 监听器端口号
ingress.vke.volcengine.com/loadbalancer-protocol: "https" # 监听器协议。本例中取值为 https
spec:
ingressClassName: alb # ALB Instance 的资源名称
rules:
- host: example.com # 需要对外提供访问的域名
http:
paths:
- pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
path: / # 请求匹配的路径
backend:
service:
name: service-demo # 需要对接的服务名称
port:
number: 80 # 需要对接服务的端口号
说明
更多 Ingress 配置详情,请参考 ALB Ingress 配置 HTTPS 协议
方案优势:
  • 统一入口加密:集中管理多服务的 HTTPS 流量,降低配置复杂度。
  • 灵活路由策略:支持按域名/路径分流,同时保障加密安全。
注意
  • 证书管理:定期轮换证书并监控有效期,避免因证书过期导致服务中断,推荐使用火山引擎 证书中心 托管 SSL 证书。
  • 混合协议场景:若需同时支持 HTTP 和 HTTPS,建议通过protocol-port注解配置自动重定向(HTTP > HTTPS)。
最近更新时间:2025.12.15 19:15:39
这个页面对您有帮助吗?
有用
有用
无用
无用