EKS 训练营-网络安全增强(7)

本文档详细介绍了如何在Amazon EKS集群上安装和配置Calico,以实现网络策略控制,提供网络隔离和租户隔离。通过应用网络策略,您可以限制Pod之间的通信,例如,允许前端服务与后端服务通信,同时阻止其他不必要连接。此外,还展示了如何通过管理UI演示网络策略的效果,并提供了清理资源的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

Project Calico 是一种适用于 Kubernetes 的网络策略引擎。通过强制实施 Calico 网络策略,您可以实现网络隔离和租户隔离。在必须隔离各个租户的多租户环境中,或者当您要针对开发、暂存和生产创建单独的环境时,这非常有用。网络策略类似于 AWS 安全组的一点是,您可以创建网络传入和传出规则。您使用 Pod 选择器和标签向 Pod 分配网络策略,而不是向安全组分配实例。以下过程介绍如何在 Amazon EKS 集群中的 Linux 节点上安装 Calico。

Calio 免费版

安装 Calico

在 aws 的 cni 网络插件项目里面也有 Calico 的内容 aws/amazon-vpc-cni-k8s GitHub project

通过如下方式部署和启用

mkdir ~/environment/calico && cd ~/environment/calico

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml

kubectl get daemonset calico-node --namespace calico-system

返回如下(calico-node的数量等于 eks 中节点的数量)

NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
calico-node   2         2         2       2            2           kubernetes.io/os=linux   70s

部署和测试

本部分演示了 Project Calico 文档提供的 Stars 策略演示。该演示在您的 Amazon EKS 集群上创建前端、后端和客户端服务。该演示还创建管理 GUI,用于显示各服务之间可用的传入和传出路径。

在您创建任何网络策略之前,所有服务可以双向通信。应用网络策略后,您可以看到客户端只能与前端服务进行通信,而后端仅接受来自前端的流量。

  1. 应用前端、后端、客户端和管理 UI 服务:

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml
    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml
    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml
    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml
    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
  2. 等待所有 Pod 达到 Running 状态:

    kubectl get pods --all-namespaces --watch
  3. 要连接到管理 UI,我们启用 ELB 来暴露 management-ui 服务:

    kubectl patch svc management-ui -p '{"spec":{"type":"LoadBalancer"}}' -n management-ui
  4. 在k8s里面,默认pod之间的网络是联通的。我们可以通过如下方式获得 management-ui 的 ELB 的地址

    kubectl get svc -o wide -n management-ui
    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                                                              PORT(S)          AGE   SELECTOR
    management-ui   LoadBalancer   10.100.206.231   aae5be09f69064f7a913e9da9d7c23e6-546929450.eu-west-1.elb.amazonaws.com   9001:30002/TCP   87m   role=management-ui
  5. 打开 ELB 的地址,记得端口号是 9001,应该看到管理 UI。C 节点是客户端服务,F 节点是前端服务,B 节点是后端服务。每个节点都有到所有其他节点的完整通信访问权限 (如粗体、彩色行所示)。

    image-20210524135306707
  6. 应用以下网络策略以隔离各个服务:

    kubectl apply -n stars -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
    kubectl apply -n client -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
  7. 刷新您的浏览器。您可以看到管理 UI 不再能访问任何节点,因此它们不会显示在 UI 中。

  8. 应用以下网络策略以允许管理 UI 访问这些服务:

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml
    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml
  9. 刷新您的浏览器。您可以看到管理 UI 可以再次访问节点,但各节点无法相互通信。

    image-20210524135815358
  10. 应用以下网络策略以允许流量从前端服务传到后端服务:

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml

    image-20210524140146150
  11. 应用以下网络策略以允许流量从 client 命名空间传到前端服务:

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml

    image-20210524140240198

资源清理

在完成该演示后,您可以使用以下命令删除其资源:

kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml

删除 calico

kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml
kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml

即使在删除资源后,节点上的iptables规则仍可能会以意外方式干扰集群中的联网。删除 Calico 的唯一可靠方法是终止所有节点并将它们回收。要终止所有节点,请将 Auto Scaling 组所需计数设置为 0,然后备份到所需数量,或者仅终止节点。如果您无法回收节点,请参阅 Calico GitHub 存储库中的禁用和删除 Calico 策略以了解最后的解决方法。

或者创建一些允许的规则覆盖一下:

cd ~/environment/calico

cat &lt;<eof>allow-all-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-ingress
spec:
  podSelector: {}
  ingress:
  - {}
  policyTypes:
  - Ingress
EoF

cat &lt;<eof>allow-all-egress.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress
EoF

kubectl apply -f allow-all-ingress.yaml
kubectl apply -f allow-all-egress.yaml

欢迎大家扫码关注,获取更多信息

</eof

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值