k8s网络模型从 Calico切换为Canal踩的坑

问题描述

在跟着《每天五分钟玩转kubernets》这本书学习到K8S的网络章节时,实验中部署canal网络以演示Network Policy。因为最开始搭建k8s集群是部署的Calico网络(Calico也支持Network Policy,但是为了和教程保持一致,还是切换了),所以这里重新初始化了master,切换网络。

按照书上指示,操作了下面的步骤:
1、首先在k8s集群所有节点执行kubeadm reset命令销毁当前集群
2、在k8s的master上执行命令重新初始化了master:

kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.0.101

根据安装k8s集群时的步骤,初始化master之后,也又在master上执行了下面的配置kubectl的三条命令(这一步骤书上在这一环节没有提,只说了要重新init,所以还是怀着忐忑的心情执行的):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

3、然后执行canal部署命令:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml

然后在执行第一条命令的时候发现报错了:

[[email protected] ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
unable to recognize "https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml": Get https://10.0.0.101:6443/api?timeout=32s: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
unable to recognize "https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml": Get https://10.0.0.101:6443/api?timeout=32s: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
unable to recognize "https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml": Get https://10.0.0.101:6443/api?timeout=32s: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
unable to recognize "https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml": Get https://10.0.0.101:6443/api?timeout=32s: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
[[email protected] ~]# 

尝试了查看node,发现报错一样的:

[[email protected] ~]# kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

解决方法

作为k8s初学小白,还看不懂这个报错,不知道啥原因。所以只有求助Google。

看到GitHub上一个类似问题的文章有一个回答:(链接:https://github.com/kubernetes/kubernetes/issues/48378 )

然后想到可能是旧的目录$HOME/.kube和新的目录有什么冲突,于是试了一下把老的目录删除了,再重新配置kubectl(原文链接还有一些其他的解决方法可以尝试,这里用得比较简单粗暴):

[[email protected] ~]# rm -rf $HOME/.kube
#重新配置kubectl:
[[email protected] ~]#   mkdir -p $HOME/.kube
[[email protected] ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

接着再执行重新部署canal命令,就成功了:

[[email protected] ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
clusterrole.rbac.authorization.k8s.io/calico created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/canal-flannel created
clusterrolebinding.rbac.authorization.k8s.io/canal-calico created
[[email protected] ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
configmap/canal-config created
daemonset.extensions/canal created
serviceaccount/canal created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
[[email protected] ~]#

查看node命令也正常了:

[[email protected] ~]# kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
k8smaster   Ready    master   27m   v1.14.0

等把node节点重新加到集群里(一主一从)之后,再查看网络,成功切换到了canal:

[[email protected] ~]# kubectl get --namespace=kube-system daemonset canal
NAME    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
canal   2         2         2       2            2           beta.kubernetes.io/os=linux   46m
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# kubectl get --namespace=kube-system pod -o wide|grep canal
canal-xwbps                         3/3     Running   0          46m    10.0.0.101   k8smaster   <none>           <none>
canal-zwfqj                         3/3     Running   0          2m5s   10.0.0.102   k8snode01   <none>           <none>
[[email protected] ~]# 

原文地址:https://blog.51cto.com/10950710/2411627

时间: 2024-08-30 18:31:01

k8s网络模型从 Calico切换为Canal踩的坑的相关文章

初用react容易踩的坑

此文章同步连接: https://github.com/p2227/p2227.github.io/issues/3 # 初用react容易踩的坑 ## 自定义组件忘记大写第一个字母 ```javascript var myComp = React.createClass({ render: function() { return <div>Hello world</div>; } }); ReactDOM.render(<myComp />, mountNode);

Ubuntu中安装FTP 服务器自己踩得坑

12点多了,擦!做个码农真不容易呀! 系统:Ubuntu16.04 安装:FTP 步骤: 1.不管有没有一上来我先卸载: sudo apt-get purge vsftpd 2.再安装:sudo apt-get install vsftpd 3.创建ftp用户: 创建用户目录 sudo mkdir /home/uftp 创建用户 sudo useradd -d /home/uftp -s /bin/bash uftp 修改密码 sudo passwd uftp#这里会提示你输入二次密码 4配置v

使用CCNode作为容器容易踩的坑

Cocos2dx中CCNode经常作为一个父容器,里面装一些UI控件,最后组成一个复杂的自定义的UI控件,但是在使用别人的自定义控件和自己写自定义问题的时候会踩一些坑. 首先拿到一个自定义的UI控件一定要明确他的position是在控件的什么位置,即锚点位置,这样才能知道改如何取设置position. 其次知道父容器区域是不是全包含子容器的,因为ccnode里面的子节点的范围是可以超出你设定的ccnode的区域的.原因在于ccnode可以没有区域,这个跟winform桌面编程的Panel有差别,

踩一坑,采一金之php数据类型那点“破”事

学海无涯,乘舟以渡之~ php边学边写差不多一年多点,php这种弱类型语言与之前接触的c.java.as3等语言还是挺不一样的,现在觉得很庆幸的是从c开始学编程,无论数据类型还是指针也好,至少有个基础的概念. 在php数据类型上踩了不少坑,也学到了一些东西,在这里分享一下,看源码可能会很枯燥,不过了解一些底层实现就好,后面不要再踩坑. 序. 之前在网上看到有比较热的帖子说:PHP的ip2long有bug,请慎用?于是看了下描述,大致如下 <?php echo ip2long('58.99.11.

Asp.Net Core中使用Swagger,你不得不踩的坑

很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagger,你不得不踩的坑. 这篇文章着重讲几点: swagger 跨层注释问题 swagger Get请求传多个参数的问题 swagger Enum 注释问题 swagger api文档版本控制 第一步:搭建一个webapi项目或者mvc项目,引入swagger nuget 我创建项目,习惯性的先创建一个

必读丨新手程序员最容易踩的“坑”,你踩过几个?

人生,就是一边踩"坑",一边上升的过程.而程序员的一生,不仅要改无数的BUG,也要越过很多的"坑".今天,小千为大家分享一些开发人员常见的"坑",希望同学们能够从中受益. 1.重新实现API中已有的代码 大多数开发人员都会利用某种框架来减轻工作的负担.对于没有使用该框架经验的开发人员来说,掌握框架的API提供的所有功能非常困难. 因此,他们常常会重新实现API中已有的某些代码.没有经验的开发人员更有可能踩这个坑的原因有两个:? 第一,由于缺乏经验

k8s 网络模型解析

今天研究了一下k8s的网络模型,该解析基于flannel vxlan+ kubeproxy iptables 模式. 一.Docker 首先分析一下Docker层面的网络模型,我们知道容器是基于内核的namespace机制去实现资源的隔离的.network是众多namespace中的一个,那么如何保证一个节点上容器之间的通信呢?Docker的做法是通过虚拟网桥来桥接虚拟网卡.下面具体解释一下. 首先每一个容器在默认情况下都是在自己的network namespace里面的,也就是说默认情况下它只

mobile web曾经的踩过坑

兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是调试依然比PC端麻烦很多.而且很多坑是因为手机浏览器本身的bug,一旦出现,相应的解决方案很难根据以前的经验进行推测.只能寄希望于谷歌 + 猜. 这里记录一下我做手机端浏览器曾经踩过的坑.之所以用”曾经”,随着版本的更新,有些问题没了. 另外我(我司)没有足够的人力和物力对很多手机浏览器进行测试,我

Markdown编辑器开发记录(一):开发的初衷和初期踩的坑

先说下选择Markdown编辑器的原因,我们进行平台开发,需要很多的操作手册和API文档,要在网站中展示出来就需要是HTML格式的文件,但是由于内容很多,不可能全部由技术人员进行文档的编写,如果是只有文档操作经验的人来做就会出现很麻烦的情况. 最初,我们先用试着用word来写,再转换成HTML文件保存,但是这样存在几个问题:1.转换出来的文件标签和样式十分的杂乱和冗余,有太多无用的标签,后期要修改样式也十分不容易:2.图片无法保存,在word文档中插入的图片路径是固定的物理路径,或是与文档一起存