赞
踩
问题:由于公网ip不是绑定在物理机上的,因此通过一般的部署方式总会有问题
解决方案:使用wireguard将公网ip映射成内网ip
注意:主节点配置一定要是最好的,因为上面会运行整个集群的控制面板;
记得腾讯云控制台那边开放所有端口
vim /etc/sysctl.conf
# 添加
net.ipv4.ip_forward = 1
net.ipv4.conf.all.proxy_arp = 1
# 更新
sysctl -p /etc/sysctl.conf
#添加iptables规则
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#wg0为wireguard自动生成的虚拟网卡,我们不需要手动设置
iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
看自己操作系统对应的下载方式
Wireguard官网
以下为CentOS7.6操作
将使用wireguard进行公网的内网映射,需要内核版本为5.15及以上
# 下载内核
# 载入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 升级elrepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm
# 载入 elrepo-kernel 数据
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
# 安装最新版本的内核
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml.x86_64 -y
# 删除旧版本工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
# 修改系统使用的内核
# 查看当前实际启动顺序
grub2-editenv list
# 查看内核插入顺序
grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
# 设置默认启动内核
grub2-set-default 'CentOS Linux (5.15.2-1.el7.elrepo.x86_64) 7 (Core)'
# 重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启服务器
reboot
# 验证当前内核版本
uname -r
# 安装wireguard
sudo yum install yum-utils epel-release
sudo yum install kernel-plus wireguard-tools
sudo yum install elrepo-release epel-release
sudo yum install kmod-wireguard wireguard-tools
# 获取每台机器的公钥私钥,用于通信
# 将其记录下来
wg genkey | tee privatekey | wg pubkey > publickey
解释:规则其实也是比较好理解,首先,确定本机的内网ip,
设置其他机器的内网ip以及对应的外网ip,这样发送数据包给相应内网ip时网卡就将该包转发给设置的外网ip;
私钥公钥用于数据加密安全;
# master节点上(192.168.1.1) # vim /etc/wireguard/wg0.conf # 之后wireguard会根据该文件名自动生成wg0虚拟网卡 # 以下示例文件为master节点上的的参考; [Interface] ListenPort = 54180 PrivateKey = eChFNxb2E7m9a2acpuBFtIEkLReDHVko/RpCtJxoUkA= Address = 10.0.0.1 [Peer] PublicKey = BhWyKeMLYFjytq5uCQOb2VEuFVZ6p9vAol5pGg4liDc= AllowedIPs = 10.0.0.2/32 Endpoint = 81.68.187.197:54180 [Peer] PublicKey = w7fSqk5CRBlcDWhFJjbzSzOXXMMJ1x1AmTlWmZZhpWM= AllowedIPs = 10.0.0.3/32 Endpoint = 1.116.38.204:54180 [Peer] PublicKey = oNcsv4uZ5U4xQZhDCx0QOob9Ao5CikbMM++ktbWvBi0= AllowedIPs = 10.0.0.4/32 Endpoint = 81.68.248.160:54180 [Peer] PublicKey = 9RcHYGj4huZAKMpQSkMKn3iIYqKmbiC/lw+dinr03mM= AllowedIPs = 10.0.0.5/32 Endpoint = 121.5.58.90:54180
# liyuan-node2节点上(192.168.1.1)
# vim /etc/wireguard/wg0.conf
# 之后wireguard会根据该文件名自动生成wg0虚拟网卡
#
[Interface]
PrivateKey = OMq+uga9k7XL5a31k6ahzd5SwbKNT/4B9Pqojddwc14=
Address = 192.168.1.2
ListenPort = 5418
[Peer]
PublicKey = 4yOc1xeA8fcP9xfYwpQZ4WGEUmu15vQwKB4laFYUwxg=
EndPoint = 81.68.209.55:5418
AllowedIPs = 192.168.1.1/32
ip link add wg0 type wireguard
wg-quick up wg0
ip link set wg0 up
systemctl enable wg-quick@wg0
# 配置热重载
wg syncconf wg0 <(wg-quick strip wg0)
可以看到本机10.0.0.1可以ping通过
10.0.0.2
10.0.0.3
10.0.0.4
记住在腾讯云那边要放行相应端口
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 添加转发规则
vim /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward=1
#加载这条规则
sysctl -p /etc/sysctl.d/k8s.conf
#添加docker wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum list docker-ce --showduplicates # (1)安装docker yum install docker-ce-3:20.10.12-3.el8 # 设置docker下载源 vim /etc/docker/daemon.json { "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"] } # 启动docker服务 systemctl start docker systemctl enable docker #(2)添加kubeadm 源 vim /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg # (3)安装kubeadm yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y #(4)设置开机自启动 systemctl enable kubeadm #(5)下载k8s所需组件 imageList=( kube-apiserver:v1.17.4 kube-controller-manager:v1.17.4 kube-scheduler:v1.17.4 kube-proxy:v1.17.4 pause:3.1 etcd:3.4.3-0 coredns:1.6.5 ) vim install-k8s.sh for image in ${imageList[@]} do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$image docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$image k8s.gcr.io/$image docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$image done chmod +x install-k8s.sh #运行该脚本 ./install-k8s.sh
# 初始化kubeadm
kubeadm init --kubernetes-version=v1.17.4 --service-cidr=2.1.0.0/16 --pod-network-cidr=2.244.0.0/16 --ignore-preflight-errors=all --apiserver-advertise-address=10.0.0.1 --v=10 --image-repository="registry.aliyuncs.com/google_containers"
#修改internal-ip为wg0网卡的ip
vim /var/lib/kubelet/kubeadm-flags.env
systemctl daemond-reload
systemctl restart kubelet
# 添加docker安装源 (1)wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum list docker-ce # 安装docker (2)yum install docker-ce-3:20.10.12-3.el8 # 书写docker配置文件,设置其下载源 (3)vim /etc/docker/daemon.json { "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"] } (4)systemctl restart docker (5)systemctl enable docker
# 添加k8s软件源
(1)vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
(2)yum install kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
#配置路由转发规则
(3)echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe br_netfilter
kubeadm join 10.0.0.1:6443 --token tkrdse.w6jdluo21cjvag11 \
--discovery-token-ca-cert-hash sha256:cc7d05228add3cdeea001b57dfdec9abfb556bbab73a2a50404a1eb54a97a246
如果没看到上述的这一段代码,
参考 从节点加入k8s集群
# 将主节点的配置文件拷贝到从节点相同位置
scp root@81.68.209.55:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
vim /etc/profile
添加 export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile
#修改internal-ip为wg0网卡的ip
vim /var/lib/kubelet/kubeadm-flags.env
添加 --node-ip = 10.0.0.2
kubectl taint node liyuan-master node-role.kubernetes.io/master:NoSchedule-
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --node-external-ip 主节点公网IP --advertise-address 主节点公网IP --node-ip 主节点内网IP(上述设置的为10.0.0.1) --flannel-iface wg0 (指定网卡)
参数 | 解释 |
---|---|
–node-external-ip | 节点外网IP |
–advertise-address | 节点间通信的ip |
–node-ip | 节点内网IP |
–flannel-iface | 指定通信时使用的网卡 |
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://10.0.0.1:6443(主节点ip) K3S_TOKEN= (见主节点下 /var/lib/rancher/k3s/server/token) sh -s - --node-external-ip 从节点公网IP --node-ip 从节点内网IP,此处为10.0.0.2 --flannel-iface wg0
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://10.0.0.1:6443 K3S_TOKEN=K10b99b088c197761285a9112f6f9e51faef41e92d3a86d3d668edfbb284bdc71a4::server:b2aee3028f6c8a2077265b773951f968 sh -s - --node-external-ip 1.116.38.204 --node-ip 10.0.0.3 --flannel-iface wg0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。