2

我已经实现了一个多主 HA kubernetes 集群,并希望按照此处所述的硬件实现 Calico 。我能够完成所有步骤,并且不同节点中的 pod 和服务以及 pod 和其他 pod 之间没有连接。

唯一不同的是,我在 AWS 中使用了两个不同的 AZ,我想这应该不是问题。我可以看到 pod 正在获取 IP,并且 calico 网络接口正在创建,但仍然可以看到我解释的连接。Node 甚至没有公共互联网访问权限。我在指南中进行了完全相同的 BGP 配置,但没有运气,而且在涉及多可用区部署时,我不太确定 BGP 配置中需要更改的内容。我不太了解 Calico BGP 配置。

不幸的是,calicoctl node diags 没有正确运行,也没有提供更多信息来继续前进。

我希望您能提出宝贵的想法和建设性的批评来解决这个问题。

4

1 回答 1

1

在BGP 模式下配置的 Calico要求所有实例都位于同一子网中才能开箱即用。

要将 calico 与跨多个可用区拆分的部署一起使用,您必须:

禁用 AWS 源/目标检查(请参阅此处):

您可以使用 AWS CLI 执行此操作:

    aws ec2 modify-instance-attribute --no-source-dest-check --instance-id          $EC2_INSTANCE_ID --region <REGION-WHERE-EC2-INSTANCE-IS-LAUNCHED>

或使用 AWS 控制台:

  1. 在https://console.aws.amazon.com/ec2/打开 Amazon EC2 控制台 。
  2. 在导航窗格中,选择 Instances
  3. 选择 NAT 实例,选择 ActionsNetworkingChange Source/Dest。检查
  4. 对于 NAT 实例,验证此属性是否已禁用。否则,选择 是,禁用
  5. 如果 NAT 实例有辅助网络接口, 请从描述选项卡 上的 网络接口中选择它, 然后选择接口 ID 以转到网络接口页面。选择 操作更改源/目标。检查,禁用设置,然后选择 保存。*

在 Calico IP 池上启用 IPIP 封装和传出 NAT

( IPPool) 表示 Calico 期望从中分配端点 IP 的 IP 地址集合。(请参阅此处如何设置

,那么所有 Kubernetes 实例必须位于同一个子网中,Calico 才能开箱即用。

要启用“CrossSubnet”IPIP 功能,请配置您的 Calico IP 池资源以将 IPIP 模式启用为“CrossSubnet”,如下例所示:

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: ippool-multi-az
spec:
  cidr: 192.168.0.0/16
  ipipMode: CrossSubnet
EOF

上面的示例指的是从 Calico 文档中获取的AWS 云配置。请注意,Calico 文档还包含有关GCP、Azure 和 IBM的信息。

备注:如果您遇到“困难的方式”的另一个问题,您可能希望使用通过以下 calico 指南创建的另一个集群作为参考:

最后,值得一看的是这个关于calico路由模式的非常好的文档(它还显示了跨子网 ipip 模式)。

于 2020-11-10T15:51:33.460 回答