K8s网络组件-Calico

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s网络组件-Calico相关的知识,希望对你有一定的参考价值。

参考技术A

广播域

ARP(地址解析协议)

三层交换机

VLAN(Virtual Local Area Network):虚拟局域网

VLAN的主要好处

路由器主要分为两个端口类型

功能

路由器的功能

路由

相关概念

容器之间通信

容器访问外网

infra container

pod通信

两个Pod在同一个Node上

两个Pod在不同Node上

概述

etcd方式

api方式-kubeadmin

api方式-二进制

查看Calico状态

工作模式

概述

工作流程

概述

calicoctl工具修改为BGP模式

工作流程

背景

解决

具体步骤:

01 关闭 node-to-node模式

02 配置指定节点充当路由反射器

3、使用标签选择器将路由反射器节点与其他非路由反射器节点配置为对等

4、查看节点的BGP连接状态

网络需求

方案一:专门准备一台Node负责转发来自办公网络

方案二:两方上层路由器使用BGP做路由交换

概述

应用场景

Pod网络入口方向隔离

Pod网络出口方向隔离

Demo

需求1:将default命名空间携带app=web标签的Pod隔离,只允许携带run=client1标签的Pod访问80端口

需求2:default命名空间下所有pod可以互相访问,也可以访问其他命名空间Pod,但其他命名空间不能访问default命名空间Pod

解决k8s核心组件calico pod资源不创建问题

解决k8s核心组件calico pod资源不创建问题

1.问题描述

由于K8S集群Master节点故障,导致calico网络组件虽然处于Running状态,但是一直无法准备就绪,如下图所示

calico-node-lpt7h运行在master节点,第一时间紧急处理方法就是将其pod删除,让K8S自动重建该pod,使整个集群快速恢复

但是就当我将calico-node-lpt7h pod删除后,该pod始终无法自建,就好像是从来没有这个pod似的

2.解决方法

期初排查时,我觉得可能是由于当前master节点核心组件apiserver、kubelet产生了问题,当将这两个组件重启完后,calico pod始终没有在master上进行自建,这有点不太乐观,然后我又将该主机进行重启,问题依旧无法解决。

就在此时,我想起来曾经遇到过类似的问题,当时是以kubeadm方式安装的K8S集群,apiserver这个核心组件就是始终无法在当前服务器上创建pod,不光是apiserver,controllermanager、scheduler也无法启动,我当时的处理方法是查看了当前服务器上运行的所有容器,发现居然还有apiserver、controllermanager、scheduler这些容器,心想,这不应该了,都应有用kubectl delete删除这个pod了,为什么有容器在运行呢,得到的结论可能就是核心组件只是删除的表面,并没有在docker里完成删除,导致新的claico容器启动不了。

这时用docker ps -a | grep calico命令进行查看,很清楚的看到运行了好多calico容器

将容器全部删除

3.总结

pod不在集群中创建的可能原因:

1)上次删除pod时没有删除干净,docker中任然存在

2)kube-apiserver、kube-scheduler、kube-controller-manage、kubelet、kube-proxy组件中集群api地址写的有错误导致

3)还有可能是由于pod调度的主机设置了污点,所以导致无法创建pod

kubectl taint node binary-k8s-master1 node-role.kubernetes.io/master:NoExecute

kubectl taint node binary-k8s-master1 node-role.kubernetes.io/master:NoExecute-

4)如果以上三种可能都不存在,那么就是scheduler组件或者kubelet的问题了

以上是关于K8s网络组件-Calico的主要内容,如果未能解决你的问题,请参考以下文章

K8S概念梳理

k8s 网络三

Kubernetes — Calico

#yyds干货盘点#k8s中的核心组件

k8s部署---node节点组件部署

解决k8s核心组件calico pod资源不创建问题