eBPF Cilium实战(1) - 基于团队的网络隔离

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在 Rainbond 集群中,每个团队对应于底层 Kubernetes 的一个 Namespace ,由于之前使用的底层网络无法进行 Namespace 级别的网络管理,所以在 Rainbond 同一集群下的不同团队间,所以组件可以自由的进行互相访问,用户无法对此做出任何限制,这也导致了底层网络的安全隐患一直存在。现在由 cilium 提供网络服务的 Kubernetes 集群可以很好的解决这一问题,用户可以根据自己的需求,制定针对每个团队、每个组件的网络策略,加强底层网络管理,实现网络层的安全把控。

Rainbond 集群中,每个团队对应于底层 Kubernetes 的一个 Namespace ,由于之前使用的底层网络无法进行 Namespace 级别的网络管理,所以在 Rainbond 同一集群下的不同团队间,所以组件可以自由的进行互相访问,用户无法对此做出任何限制,这也导致了底层网络的安全隐患一直存在。现在由 cilium 提供网络服务的 Kubernetes 集群可以很好的解决这一问题,用户可以根据自己的需求,制定针对每个团队、每个组件的网络策略,加强底层网络管理,实现网络层的安全把控。

使用 cilium 作为 Kubernetes 网络服务

  • 使用从主机安装时,修改 network.plugin 值为 none

1.png

  • 安装 helm

wget https://goodrain-pkg.oss-cn-shanghai.aliyuncs.com/pkg/helm && chmod +x helm && mv helm /usr/local/bin/

  • 部署 cilium

helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --version 1.11.2 --namespace kube-system --set operator.replicas=1

kubectl get pods --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,HOSTNETWORK:.spec.hostNetwork --no-headers=true | grep '<none>' | awk '{print "-n "$1" "$2}' | xargs -L 1 -r kubectl delete pod

  • 验证 cilium

下载 cilium 命令行工具

curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz{,.sha256sum}

  • 确认状态

$ cilium status --wait
/¯¯\
/¯¯\__/¯¯\    Cilium:         OK
\__/¯¯\__/    Operator:       OK
/¯¯\__/¯¯\    Hubble:         disabled
\__/¯¯\__/    ClusterMesh:    disabled
\__/

DaemonSet         cilium             Desired: 2, Ready: 2/2, Available: 2/2
Deployment        cilium-operator    Desired: 2, Ready: 2/2, Available: 2/2
Containers:       cilium-operator    Running: 2
cilium             Running: 2
Image versions    cilium             quay.io/cilium/cilium:v1.9.5: 2
cilium-operator    quay.io/cilium/operator-generic:v1.9.5: 2

  • 测试网络联通性(国内服务器测试时,涉及到外部网络的测试可能会失败,不影响正常使用)

$ cilium connectivity test
ℹ️  Monitor aggregation detected, will skip some flow validation steps
✨ [k8s-cluster] Creating namespace for connectivity check...
(...)
---------------------------------------------------------------------------------------------------------------------
📋 Test Report
---------------------------------------------------------------------------------------------------------------------
✅ 69/69 tests successful (0 warnings)

设置团队网络隔离

Cilium 的网络隔离策略遵循白名单机制,在不创建网络策略的情况下,对于网络不作任何限制,在为指定类型的 pod 集合创建网络策略后,除策略中允许的访问地址外,其它请求都会被拒绝。

  • 前期准备
  • 创建两个开发团队和测试团队,英文名称设置为 dev 和 test
  • 在开发团队和测试团队下创建 nginx-dev 和 nginx-test 组件,开启对内端口,内部域名分别设置为 nginx-dev 和 nginx-test
  • 在开发和测试团队下创建客户端组件
  • 不做任何限制
    在不做限制的情况下,各个团队之间的所有服务均可以自由通信,不受任何特殊限制

2.png3.png

  • 限制只允许本团队内组件互相访问,隔绝其它团队访问
    在实际生产中,一个集群内部可能会同时部署开发、测试、生产等多个团队,基于安全性的考虑,需要对每个的团队做出网络隔离,禁止其它团队可以对其进行访问,下面以开发团队为例说明如何限制不允许其它团队对其访问。

4.png

  • Cilium 网络策略文件(dev-ingress.yaml)

apiVersion:"cilium.io/v2"
kind:CiliumNetworkPolicy
metadata:
name:"dev-namespace-ingress"
spec:
endpointSelector:
matchLabels:
"k8s:io.kubernetes.pod.namespace":dev
ingress:
-fromEndpoints:
-matchLabels:
"k8s:io.kubernetes.pod.namespace":dev

  • 创建策略

kubectl create -f dev-ingress.yaml -n dev

  • 确认策略

$ kubectl get CiliumNetworkPolicy -A
NAMESPACE   NAME                    AGE
dev         dev-namespace-ingress   39s

  • 测试效果

5.png6.png

  • 设置开发团队下的 nginx-dev 组件只允许测试团队下的组件访问
    在某些情况下,一些组件的安全要求会更为严格,可能只会允许本团队内符合要求的部分组件进行访问,下面以 nginx-dev 为例说明如何限制仅允许部分组件进行访问。

7.png

  • Cilium 网络策略文件(nginx-dev-ingress0.yaml)

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "nginx-dev-ingress"
spec:
endpointSelector:
matchLabels:
name: grc156cb
ingress:
- fromEndpoints:
- matchLabels:
name:

  • 创建策略

kubectl create -f nginx-dev-ingress0.yaml -n dev

  • 确认策略

$ kubectl get CiliumNetworkPolicy -A
NAMESPACE   NAME                    AGE
dev         nginx-dev-ingress0       85s

  • 测试效果

8.png9.png

  • 设置开发团队允许本团队下组件访问的同时,允许开发团队下的 nginx-dev 组件被测试团队中任意组件访问
    在设置了团队网络隔离的情况下,有时候需要临时开放一些组件给其它团队访问以便进行调试,下面以 nginx-dev 组件为例说明如何在设置网络隔离的情况下开放外部团队的访问权限。

10.png

  • Cilium 网络策略文件(nginx-dev-ingress1.yaml)

apiVersion:"cilium.io/v2"
kind:CiliumNetworkPolicy
metadata:
name:"nginx-dev-ingress1"
spec:
endpointSelector:
matchLabels:
name:grc156cb
ingress:
-fromEndpoints:
-matchLabels:
"k8s:io.kubernetes.pod.namespace":test

  • 创建策略

kubectl create -f dev-ingress.yaml -n dev
kubectl create -f nginx-dev-ingress.yaml -n dev

  • 确认策略

$ kubectl get CiliumNetworkPolicy -A
NAMESPACE   NAME                    AGE
dev         dev-namespace-ingress   19s
dev         nginx-dev-ingress1      12s

  • 测试效果

11.png12.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
存储 安全 物联网
网络安全与信息安全:防护之道与实战策略
【5月更文挑战第30天】在数字化时代,数据是最宝贵的资产之一,而网络安全和信息安全则是维护这些资产的坚固盾牌。本文将深入探讨网络安全漏洞的概念、加密技术的应用以及提升安全意识的重要性。通过对网络威胁的剖析,我们揭示了防御机制中存在的薄弱环节,并提出了相应的强化措施。文章还将介绍当前最前沿的加密方法,以及如何通过教育和技术手段增强个人和组织的安全防护能力。
|
8天前
|
Java
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
【6月更文挑战第22天】在Java网络编程中,理解和运用URL与URLConnection是关键。URL代表统一资源定位符,用于标识网络资源;URLConnection则用于建立与URL指定资源的连接。通过构造URL对象并调用openConnection()可创建URLConnection。示例展示了如何发送GET请求读取响应,以及如何设置POST请求以发送数据。GET将参数置于URL,POST将参数置于请求体。练习这些基本操作有助于提升网络编程技能。
|
27天前
|
容器 Perl Kubernetes
深入 Kubernetes 网络:实战K8s网络故障排查与诊断策略
本文介绍了Kubernetes网络的基础知识和故障排查经验,重点讨论了私有化环境中Kubernetes网络的挑战。首先,文章阐述了Kubernetes网络模型的三大核心要素:Pod网络、Service网络和CNI,并强调了其在容器通信和服务发现中的作用。接着,通过三个具体的故障案例,展示了网络冲突、主节点DNS配置更改导致的服务中断以及容器网络抖动问题的解决过程,强调了网络规划、配置管理和人员培训的重要性。最后,提到了KubeSkoop exporter工具在监控和定位网络抖动问题中的应用。通过这些案例,读者可以深入了解Kubernetes网络的复杂性,并学习到实用的故障排查方法。
146283 18
|
8天前
|
机器学习/深度学习 数据采集 存储
神经网络案例实战
使用PyTorch解决手机价格分类问题:收集包含RAM、存储等特征的手机销售数据,将价格分为4个等级的分类任务。步骤包括数据预处理、特征工程、选择神经网络模型、训练、评估和预测。模型使用Sigmoid激活的三层网络,训练时采用交叉熵损失和SGD优化器。通过调整模型结构、优化器和学习率以优化性能。
|
14天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
93 9
|
15天前
|
数据采集 前端开发 Python
Python3网络开发实战读后感
Python3网络开发实战读后感
|
15天前
|
机器学习/深度学习 自然语言处理 前端开发
深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战
深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战
|
17天前
|
缓存 JavaScript API
【vue实战项目】通用管理系统:封装token操作和网络请求
【vue实战项目】通用管理系统:封装token操作和网络请求
16 0
|
30天前
|
监控 安全 算法
网络安全与信息安全:防护之道与实战技巧
【5月更文挑战第30天】在数字化时代,网络与信息安全已成为一个不断演进的战场。本文将深入探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。通过对常见网络威胁的分析,我们揭示了防护措施的必要性,并分享了如何通过多层次的安全策略来增强个人和组织的信息安全防线。
|
1月前
|
SQL 安全 物联网
网络安全与信息安全:防范之道与实战技巧
【5月更文挑战第27天】在数字化时代,网络安全与信息安全已成为维护个人隐私、企业资产和国家安全的重要领域。随着网络攻击手段的日益复杂化,理解并应对网络安全漏洞、掌握加密技术以及提升安全意识显得尤为重要。本文将深入探讨网络安全的核心概念、常见漏洞及其防御策略,同时分享加密技术和安全意识方面的实用知识,旨在为读者提供一份综合性的网络安全指南,以增强个人和组织在信息时代的防护能力。

热门文章

最新文章