本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon EKS 上安装 Calico
Project Calico
-
当将 Fargate 与 Amazon EKS 一起使用时不支持 Calico。
-
Calico 将规则添加到节点上的
iptables
,其优先级可能高于您在 Calico 外部实施的现有规则。考虑将现有iptables
规则添加到 Calico 策略,以避免 Calico 策略以外的规则被 Calico 覆盖。 -
如果您使用 Pod 的安全组,则分支网络接口上的 Pod 的流量不会限制于 Calico 网络策略实施,并且仅限于 Amazon EC2 安全组实施。社区正在消除此限制。
在 Amazon EKS Linux 节点上安装 Calico
-
完成与集群所在区域对应的选项,将 Calico 清单应用于集群。
-
除 中国 (宁夏) 或 中国(北京) 之外的所有区域 – 应用
aws/amazon-vpc-cni-k8s
GitHub 项目中的 Calico 清单。此清单在 DaemonSets 命名空间中创建 kube-system
。kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml
-
中国 (宁夏) 或者 中国(北京)
-
使用下面的命令下载 Calico 清单。
curl -o calico.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml
-
修改清单。
-
查看您下载的一个或多个清单文件,并记下映像名称。使用以下命令在本地下载映像。
docker pull image:<tag>
-
使用以下命令标记要推送到中国区域内的 Amazon Elastic Container Registry 存储库的映像。
docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
-
使用以下命令将映像推送到中国区域内的 Amazon ECR 存储库。
docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
-
更新一个或多个 Kubernetes 清单文件或以引用您所在区域内的 Amazon ECR 映像 URL。
-
-
应用 Calico 清单。此清单在 DaemonSets 命名空间中创建
kube-system
。kubectl apply -f calico.yaml
-
-
-
查看
kube-system
DaemonSets 并等待calico-node
DaemonSet 具有处于DESIRED
状态的READY
数量的 Pod。出现这种情况时,Calico 正在运行。kubectl get daemonset calico-node --namespace kube-system
输出:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE calico-node 3 3 3 3 3 <none> 38s
从 Amazon EKS 集群中删除 Calico
-
如果您在 Amazon EKS 集群中使用完 Calico,则可以使用以下命令删除 DaemonSet:
kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml
Stars 策略演示
本部分演示了 Project Calico 文档提供的 Stars 策略演示
在您创建任何网络策略之前,所有服务可以双向通信。应用网络策略后,您可以看到客户端只能与前端服务进行通信,而后端只能接受来自前端的流量。
运行 Stars 策略演示
-
应用前端、后端、客户端和管理 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
-
等待所有 Pod 达到
Running
状态:kubectl get pods --all-namespaces --watch
-
要连接到管理 UI,请将您的本地端口 9001 转发至集群上运行的
management-ui
服务:kubectl port-forward service/management-ui -n management-ui 9001
-
在本地系统上打开浏览器,然后将其指向 http://localhost:9001/
。您应该看到管理 UI。C 节点是客户端服务,F 节点是前端服务,B 节点是后端服务。每个节点都有到所有其他节点的完整通信访问权限 (如粗体、彩色行所示)。 -
应用以下网络策略以隔离各个服务:
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
-
刷新您的浏览器。您可以看到管理 UI 不再能访问任何节点,因此它们不会显示在 UI 中。
-
应用以下网络策略以允许管理 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
-
刷新您的浏览器。您可以看到管理 UI 可以再次访问节点,但各节点无法相互通信。
-
应用以下网络策略以允许流量从前端服务传到后端服务:
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml
-
应用以下网络策略以允许流量从
client
命名空间传到前端服务:kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
-
(可选)在完成该演示后,您可以使用以下命令删除其资源:
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
即使在删除资源后,节点上仍然存在
iptables
规则,这些规则仍可能会以意外方式干扰集群中的联网。删除 Calico 的唯一可靠方法是终止所有节点并将它们回收。要终止所有节点,请将 Auto Scaling 组所需计数设置为 0,然后备份到所需数量,或者仅终止节点。如果您无法回收节点,请参阅 Calico 存储库中的禁用和删除 Calico 策略GitHub以了解最后的解决方法。