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
这个页面对您有帮助吗?
有用
有用
无用
无用