主机和服务以及不同主机中的主机之间的calico网络连接失败 禁用AWS源/目标检查请参阅此处:在您的Calico IP池上启用IPIP封装和传出NAT

问题描述

我已经实现了一个多主HA kubernetes集群,并且想要按照here中所述的方式来实现Calico。我能够完成所有步骤,并且在各个节点之间的Pod和服务以及Pod和其他Pod之间没有连接。

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

不幸的是,calicoctl节点诊断无法正常运行,并且没有提供更多信息来继续前进。

在这里,我很高兴您能提出宝贵的想法和建设性的批评意见。

解决方法

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

要将calico与分布在多个可用性区域中的部署一起使用,您必须:

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

您可以使用AWS CLI做到这一点:

LEFT JOIN

或使用AWS控制台:

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

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

({ aws ec2 modify-instance-attribute --no-source-dest-check --instance-id $EC2_INSTANCE_ID --region <REGION-WHERE-EC2-INSTANCE-IS-LAUNCHED> )代表Calico收集的IP地址的集合 期望分配端点IP。 (see here how to set it up

,那么所有Kubernetes实例必须位于同一子网中,以便Calico可以立即使用。

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

IPPool

以上示例引用了来自Calico文档的AWS cloud configuration。请注意,Calico文档还包含有关GCP,Azure and IBM的信息。

备注:如果您遇到其他“困难的方法”问题,则可能需要参考下面的计算指南创建的另一个群集:

最后,值得一提的是关于calico routing modes的这份很好的文档(它也显示了跨子网ipip模式)。