k8s calico网络排错

本地三个节点搭k8s,结果前两个节点的pod互通,第三个节点不能与前两个的pod通信。

查看路由,发现第三个节点没有建立通信的路由。

 

hadoop002节点路由详情,加粗为路由详情。hadoop003无此路由。

 

[root@hadoop002 beh]# route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

default gateway 0.0.0.0 UG 100 0 0 ens192

172.16.31.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192

172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0

172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f33940ad6bcc

192.168.72.192 0.0.0.0 255.255.255.192 U 0 0 0 *

192.168.72.241 0.0.0.0 255.255.255.255 UH 0 0 0 cali835b424b828

192.168.72.243 0.0.0.0 255.255.255.255 UH 0 0 0 calid14de0a1fe6

192.168.72.244 0.0.0.0 255.255.255.255 UH 0 0 0 calibae9713a5c9

192.168.72.245 0.0.0.0 255.255.255.255 UH 0 0 0 calif15216f38d6

192.168.72.247 0.0.0.0 255.255.255.255 UH 0 0 0 cali07b42699ca8

192.168.72.253 0.0.0.0 255.255.255.255 UH 0 0 0 calied45b975889

192.168.135.128 hadoop001 255.255.255.192 UG 0 0 0 tunl0

 

[root@hadoop002 beh]# ip route

default via 172.16.31.254 dev ens192 proto static metric 100

172.16.31.0/24 dev ens192 proto kernel scope link src 172.16.31.122 metric 100

172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

172.18.0.0/16 dev br-f33940ad6bcc proto kernel scope link src 172.18.0.1

blackhole 192.168.72.192/26 proto bird

192.168.72.241 dev cali835b424b828 scope link

192.168.72.243 dev calid14de0a1fe6 scope link

192.168.72.244 dev calibae9713a5c9 scope link

192.168.72.245 dev calif15216f38d6 scope link

192.168.72.247 dev cali07b42699ca8 scope link

192.168.72.253 dev calied45b975889 scope link

192.168.135.128/26 via 172.16.31.121 dev tunl0 proto bird onlink

 

想手动添加下面两条路由,均没有成功。

ip route add 172.16.31.121/23 dev tunl0

route add -net 192.168.135.128 gw hadoop001 metric 0 netmask 255.255.255.192 dev tunl0

 

删除calico etcd数据后,重置k8s,路由信息全部消失。

查看calico-node日志,发现报错

bird: BGP: Unexpected connect from unknown address

 

重置了好几遍,结果所有节点都不通了,没办法动用calicoctl。

对比hadoop001集群和dlw1集群,dlw1状态正常。发现了一些异常,hadoop001出现的是172.18.0.1这类奇怪的ip,不是实际主机ip,进一步查看calico-node的日志发现更多线索。

[root@hadoop001 beh]# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config ./calicoctl node status

Calico process is running.

IPv4 BGP status

+--------------+-------------------+-------+----------+---------+

| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |

+--------------+-------------------+-------+----------+---------+

| 172.18.0.1 | node-to-node mesh | start | 07:16:12 | Connect |

| 172.19.0.1 | node-to-node mesh | start | 07:16:12 | Connect |

+--------------+-------------------+-------+----------+---------+

IPv6 BGP status

No IPv6 peers found.

-----------------------------分割线--------------------------------

[root@dlw1 tbc]# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config ./calicoctl node status

Calico process is running.

IPv4 BGP status

+--------------+-------------------+-------+------------+-------------+

| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |

+--------------+-------------------+-------+------------+-------------+

| 172.16.40.2 | node-to-node mesh | up | 2018-11-03 | Established |

| 172.16.40.3 | node-to-node mesh | up | 2018-11-03 | Established |

+--------------+-------------------+-------+------------+-------------+

IPv6 BGP status

No IPv6 peers found.

 

hadoop002日志也发现了这个现象,

2018-11-06 07:27:35.639 [INFO][85] int_dataplane.go 574: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"hadoop002" ipv4_addr:"172.18.0.1"

2018-11-06 07:27:35.639 [INFO][85] int_dataplane.go 574: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"hadoop003" ipv4_addr:"172.19.0.1"

2018-11-06 07:27:35.639 [INFO][85] int_dataplane.go 574: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"hadoop001" ipv4_addr:"172.16.31.121"

 

dlw2的日志则显示是主机ip

18-11-03 02:51:33.907 [INFO][197] syncer.go 473: Started receiving snapshot snapshotIndex=0x19a8

2018-11-03 02:51:33.908 [INFO][197] int_dataplane.go 574: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"dlw1" ipv4_addr:"172.16.40.1"

2018-11-03 02:51:33.919 [INFO][197] int_dataplane.go 574: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"dlw2" ipv4_addr:"172.16.40.2"

2018-11-03 02:51:33.919 [INFO][197] int_dataplane.go 574: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"dlw3" ipv4_addr:"172.16.40.3"

 

https://github.com/projectcalico/calico/issues/1941

参考这边文章,在calico-node的yaml文件中配置ip查找策略,定义自动查找且指定网络接口,重启node后网络打通。

- name: IP

value: "autodetect"

- name: IP_AUTODETECTION_METHOD

value: "interface=ens192"

 

[root@hadoop001 beh]# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config ./calico

 

ifctl node status

Calico process is running.

 

IPv4 BGP status

+---------------+-------------------+-------+----------+-------------+

| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |

+---------------+-------------------+-------+----------+-------------+

| 172.16.31.122 | node-to-node mesh | up | 09:51:28 | Established |

| 172.16.31.123 | node-to-node mesh | up | 09:51:28 | Established |

+---------------+-------------------+-------+----------+-------------+

 

IPv6 BGP status

No IPv6 peers found.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴回答您的问题。K8sCalico的安装非常简单,首先需要安装Kubernetes集群,然后安装calicoctl工具,最后使用calicoctl命令安装Calico网络组件即可。具体的安装步骤可参考Calico的官方文档。 ### 回答2: Kubernetes(简称K8s)是一个开源的容器编排引擎,而Calico是一个为Kubernetes提供网络和安全策略的解决方案。在安装Kubernetes时,可以选择安装Calico来管理容器之间的网络通信和策略控制。 以下是K8s Calico的详细安装步骤: 1. 首先,需要安装Kubernetes集群。可以使用kubeadm、Minikube或其他Kubernetes集群管理工具进行安装。 2. 在集群中的每个节点上,需要设置网络策略为"ACCEPT",以便Calico可以正常工作。 3. 配置Calico网络插件。可以通过kubectl命令行工具在Kubernetes集群中创建Calico网络插件。 4. 创建Calico的RBAC授权。使用kubectl创建一个Calico的ServiceAccount、ClusterRole和ClusterRoleBinding。 5. 下载Calico的YAML文件。可以从Calico的官方网站或GitHub仓库下载Calico的YAML文件,用于创建Calico的资源和配置。 6. 在Kubernetes集群中使用kubectl来应用Calico的YAML文件。例如,可以运行kubectl apply -f calico.yaml命令来应用Calico的配置。 7. 等待Calico在Kubernetes集群中启动和生效。可以使用kubectl get pods命令来检查Calico的Pod是否正常运行。 8. 验证Calico的安装。可以创建一个简单的Pod,并使用kubectl exec命令进入Pod中,然后尝试与其他Pod进行通信,以验证Calico网络功能。 总的来说,安装K8s Calico需要先安装Kubernetes集群,然后配置Calico网络插件和RBAC授权,最后使用kubectl应用Calico的配置文件。安装完成后,可以验证Calico是否正常工作。这样,Kubernetes集群将能够使用Calico来管理容器之间的网络通信和策略控制。 ### 回答3: Kubernetes是一种容器编排平台,而Calico是一种网络插件,可以为Kubernetes集群提供高性能和高度可扩展的网络解决方案。下面是关于如何安装Kubernetes上的Calico的详细步骤: 1. 在Kubernetes集群中的每个节点上安装和配置Docker和Kubernetes。确保节点之间可以互相通信。 2. 下载最新版本的Calico二进制文件。可以在Calico的官方网站或者GitHub上找到相关的安装包。 3. 使用kubectl在每个节点上安装Calico的Kubernetes自定义资源和自定义控制器。这可以通过运行以下命令来完成: ``` kubectl apply -f calico.yaml ``` 这将安装Kubernetes Calico的必要组件和对象。 4. 等待Calico安装完成并运行。可以使用以下命令来检查Calico的运行状态: ``` kubectl get pods -n kube-system ``` 如果所有的Calico相关的pod都是运行状态,那么表示安装成功。 5. 配置Calico网络策略。可以使用calicoctl命令行工具来创建和管理Calico网络策略。首先,需要在每个节点上安装calicoctl。可以从Calico的官方网站或者GitHub上找到相关的安装包和使用说明。 6. 使用calicoctl创建和配置网络策略。可以创建一些允许或者拒绝特定网络流量的策略。例如,可以限制来自某个IP地址或者标签的流量的访问。具体的使用方法可以查阅Calico的官方文档。 7. 验证Calico网络策略是否生效。可以在Kubernetes集群中的各个容器之间进行通信,并根据配置的策略进行验证。 通过按照上述步骤,您就可以在Kubernetes上安装和配置Calico,以提供高性能和高度可扩展的网络解决方案。请注意,这只是一个简要的概述,并且确切的安装步骤可能会因具体的环境和版本而有所不同。在安装过程中,请始终参考官方文档和最新的安装说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值