安装 Calico 附加组件
Project Calico
注意事项
-
当将 Fargate 与 Amazon EKS 一起使用时不支持 Calico。
-
Calico 将规则添加到节点上的
iptables,这些规则的优先级可能高于您已经在 Calico 之外实施的现有规则。考虑将现有iptables规则添加到您的 Calico 策略,以避免 Calico 策略之外的规则被 Calico 覆盖。 -
如果您使用 Amazon VPC CNI 附加组件版本
1.10或更早的版本,则分支网络接口上流入 pods 的 pods 安全组流量将不受 Calico 网络策略执行的约束,并且仅受到 Amazon EC2 安全组执行的限制。如果您使用的是1.11.0或更高版本的 Amazon VPC CNII 附加组件,如您为 Amazon VPC CNI 附加组件设置POD_SECURITY_GROUP_ENFORCING_MODE=standard,则分支网络接口上流入 pods 的流量将受 Calico 网络策略执行的约束。
先决条件
现有 版 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
您的设备或 Amazon CloudShell 上安装了
kubectl命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为1.22,则可以将kubectl版本1.21、1.22或1.23用于它。要安装或升级kubectl,请参阅 安装或更新 kubectl。
以下过程显示如何在 Amazon EKS 集群中的 Linux 节点上安装 Calico。要在 Windows 节点上安装 Calico,请参阅在 Amazon EKS Windows 容器上使用 Calico
在 Amazon EKS Linux 节点上安装 Calico
Amazon EKS 不维护以下过程中使用的清单或图表。在 Amazon EKS 上安装 Calico 的推荐方法是使用 Calico Operator
您可以使用 Helm 程序或清单来安装 Calico。
Stars 策略演示
本部分介绍了 Project Calico 文档提供的 Stars 策略演示
在您创建任何网络策略之前,所有服务可以双向通信。在应用网络策略后,您可以看到客户端只能与前端服务进行通信,而后端只能接受来自前端的流量。
运行 Stars 策略演示
-
应用前端、后端、客户端和管理用户界面服务:
kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml -
请查看集群上的所有 pods。
kubectl get pods -A输出示例如下。
在输出中,您应该会在以下输出中显示的命名空间中看到 pods。
列中的 podREADYNAMES和 pods 数量与以下输出中的不同。在看到具有相似名称的 pods 并且它们在STATUS列中都具有Running之前,请不要继续。NAMESPACE NAME READY STATUS RESTARTS AGE ... client client-xlffc1/1Running 05m19s... management-ui management-ui-qrb2g1/1Running 05m24sstars backend-sz87q1/1Running 05m23sstars frontend-cscnf1/1Running 05m21s... -
要连接到管理用户界面,请将您的本地端口 9001 转发至集群上运行的
management-ui服务:kubectl port-forward service/management-ui -n management-ui 9001 -
在本地系统上打开浏览器,然后将其指向 http://localhost:9001/
。您应该会看到管理用户界面。C 节点是客户端服务,F 节点是前端服务,B 节点是后端服务。每个节点都有到所有其他节点的完整通信访问权限(如粗体、彩色行所示)。
-
应用以下网络策略以隔离各个服务:
kubectl apply -n stars -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml kubectl apply -n client -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml -
刷新您的浏览器。您可以看到管理用户界面不再能访问任何节点,因此它们不会显示在用户界面中。
-
应用以下网络策略以允许管理用户界面访问这些服务:
kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml -
刷新您的浏览器。您可以看到管理用户界面可以再次访问节点,但各节点无法相互通信。
-
应用以下网络策略以允许流量从前端服务传到后端服务:
kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml -
刷新您的浏览器。您将看到前端可以与后端进行通信。
-
应用以下网络策略以允许流量从客户端传到前端服务。
kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml -
刷新您的浏览器。您将看到客户端可以与前端服务进行通信。前端服务仍可以与后端服务进行通信。
-
(可选)完成该演示后,您可以删除其资源。
kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml甚至在删除资源后,节点上仍然存在一些
iptables规则,这些规则可能以意外方式干扰集群中的联网。删除 Calico 的唯一可靠方法是终止所有节点并将它们回收。要终止所有节点,请将 Auto Scaling 组所需计数设置为 0,然后创建所需数量的备份,或者仅终止节点。如果您无法回收节点,请参阅 Calico GitHub 存储库中的禁用和删除 Calico 策略以了解最后的解决方法。
删除 Calico
使用安装 Calico 的方法删除 Calico。