Skip to content

全文约 802 字 · 读完约 3 分钟

创建 Pod/Service 报错:the provided range does not match the current range

修改kube-apiserver.yaml文件

信息

添加- --service-node-port-range=1-65535

bash
vim /etc/kubernetes/manifests/kube-apiserver.yaml

重启kubelet

bash
systemctl daemon-reload
systemctl restart kubelet

提示

如果你之前已经修改了,并且当时起了作用,下次用的时候发现失效了,那就先把那一行注释掉,重启kubelet,稍等一会然后把注释去掉再重启kubelet

Pod 无法连通集群外的服务

现象:可以ping通集群外的服务,telnet端口也是通的,但Pod就是无法访问。

信息

我这里外部服务以Mongo为例。操作系统为:Centos7.9

查看iptables规则,观察Chain INPUT和Chain OUTPUT

bash
iptables -L

如果不是ACCEPT,那就执行以下命令,放通所有流量

bash
iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

如果执行如上命令还是不行的话,那就要设置KUBE-FORWARD规则

bash
iptables -I KUBE-FORWARD -p tcp --sport 27017 -j ACCEPT
iptables -I KUBE-FORWARD -p tcp --dport 27017 -j ACCEPT

笔记

添加完成后必须快速验证,因为KUBE-FORWARD很快就会重置,如果此方法还是不行的话,那本篇文章就帮不到你了

如果添加KUBE-FORWARD规则可行的话,那就可以试着配置Firewall来实现转发,因为配置KUBE-FORWARD的规则存在不了多久就会被Kube-Proxy重置,感兴趣的可以去Google一下:Kubernetes Iptables

安装Firewall

bash
yum install firewalld -y

配置Firewalld规则

TCP:	firewall-cmd --permanent --add-port=27017/tcp
UDP:	firewall-cmd --permanent --add-port=27017/udp

开启Firewall并设置开机自动启动

bash
systemctl start firewalld

systemctl enable firewalld

以 master 身份加入集群报错:context deadline exceeded

完整报错:

text
failed to dial endpoint https://192.168.7.2:2379 with maintenance client: context deadline exceeded

master节点查询etcd相关Pod

bash
kubectl get pod -n kube-system

进入etcd Pod

bash
kubectl exec -ti etcd-k8s-master01 -n kube-system sh

查询Etcd信息

bash
export ETCDCTL_API=3

etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list

把出问题的节点删除

bash
etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member remove 17826e460c060952

Nginx 反向代理获取到的客户端 IP 是内网 IP

Nginx反向代理获取客户端访问IP,在Kubernetes1.19.x中获取到的IP是内网IP,而不是客户端真实的IP。

首先如果确认配置没问题的话,可以通过Access Log来确认。如果Log的IP也是内网IP:确定域名绑定的公网IP,确定这个IP绑定到哪台服务器上了,把Nginx Pod调度到绑定公网IP的那台服务器上,然后在Nginx SVC文件中添加[externalTrafficPolicy: Local]配置 nginx-svc

Flannel 安装失败,Node 一直 NotReady

在搭建Kubernetes1.19.0时,安装配置Flannel失败,Node一直处于NotReady状态,检查Kubelet日志发现报错:

text
Unable to update cni config: no valid networks found in /etc/cni/net.d

所有Node下载cni插件

bash
wget https://www.ikun.blog/downloads/kubernetes/cni-plugins-linux-amd64-v1.2.0.tgz

解压到/opt/cni/bin目录下

bash
cd /opt/cni/bin
cp -r /opt/cni/bin /opt/cni/bin_BAK
rm -rf ./*
tar zxvf cni-plugins-linux-amd64-v1.2.0.tgz
rm -rf cni-plugins-linux-amd64-v1.2.0.tgz

所有Node重启Kubelet

bash
systemctl daemon-reload
systemctl restart kubelet

重新部署Flannel

bash
kubectl delete -f kube-flannel.yml
kubectl apply -f kube-flannel.yml

「同一座教堂,三十种光线。」