一个计算机技术爱好者与学习者

0%

好好学K8S:使用kubeadm跨云搭建K8S集群

1. 前言

搭建K8S集群时,我们往往使用同一个云厂商的机器,或者自建机房,能够保证宿主机的二层网络是通的。基于这种网络环境搭建K8S集群,简单而稳定。
但是某些情况下,我们需要跨云(使用不同云厂商的机器)搭建K8S集群,这时候就需要充分考虑网络问题。
本文,我们就来学习一下跨云搭建K8S集群的方法。

2. 需求说明

当前我们在腾讯云使用kubeadm已经搭建好了K8S集群,网络插件使用的是Flannel VXLAN模式,现在我们想要添加一台阿里云的机器到这个腾讯云的K8S集群。

3. 网络配置思路

3.1. 基于NAT

配置思路:
腾讯云node和阿里云node间通信配置双向dnat转发

缺陷:
1、node和node间通信配置dnat,是多对多关系,太复杂,而且增加节点时所有节点都要添加配置
2、node无法跨云和pod通信,因此不可行

3.2. 基于K8S配置

配置思路:
1、controlPlaneEndpoint地址和apiServer地址改为公网IP
2、Flannel修改每个节点Annotations的public-ip参数
3、master和node间通信配置双向dnat转发
4、修改metrics server配置,增加hostAliases来自定义hosts

缺陷:
需要重新配置原有的K8S集群,影响太大。

参考文档:

3.3. 基于OpenVPN通信

配置思路:
1、阿里云机器连接到腾讯云OpenVPN,实现阿里云到腾讯云的网络畅通。
2、腾讯云配置dnat,实现通过阿里云内网IP访问阿里云机器。

缺陷:
node无法跨云和pod通信,因此不可行。

参考文档:《使用Docker安装配置OpenVPN》

3.4. 基于IPsec VPN通信

配置思路:
1、腾讯云配置IPsec,对端连接阿里云IPsec;阿里云配置IPsec,对端连接腾讯云IPsec
2、腾讯云配置路由表,阿里云网段转发到VPN;阿里云配置路由表,腾讯云网段转发到VPN

缺陷:
1、集群稳定性依赖VPN的稳定性
2、VPN Client会自动修改路由规则,影响云主机的网络,需要提前做好网络规划,VPN、腾讯云和阿里云的网络范围不要重合。

参考文档:

3.5. 小结

综上,基于IPsec VPN通信的方式可行,并且相对简单,选择它。

4. IPsec网络配置

4.1. IPsec网络配置概述

在云厂商控制台配置IPsec时,大致都是三个步骤:
1、创建VPN网关
2、创建对端网关(用户网关)
3、创建和配置VPN通道(VPN隧道、IPsec连接)

其中,最关键的一步是创建和配置VPN通道,配置时需要注意:

  • 两端IKE版本一致,加密算法、认证算法、DH组一致
    • IKE版本建议选择V2
    • 加密算法建议选择aes128
    • 认证算法建议选择sha1
    • DH组建议选择14
  • 两端IKE的端口ID类型一致,选择IP地址类型时IP值要对应
  • 两端IKE的预共享密钥一致,SA超时时间一致
  • 两端IPsec的安全协议、加密算法、认证算法、PFS DH组一致
    • 安全协议建议选择ESP
    • 加密算法建议选择aes128
    • 认证算法建议选择sha1
    • PFS DH组建议选择disable
  • 两端IPsec的报文封装模式一致,Tunnel即可
  • 两端IPsec的SA超时保持一致
  • 本端网段和对端网段配置正确
  • VPN通道创建完成后,依然可以调整部分配置
  • 当VPN通道发生变更时,要重置连接才能生效

4.2. 腾讯云配置

参考文档:

1、创建VPN网关,绑定VPC

2、创建对端网关,填入阿里云VPN网关

3、创建VPN通道,与刚刚创建的VPN网关和对端网关关联
特别注意:通信模式建议选择SPD策略,可以自定义本端网络和对端网络,清晰明了。

4、配置路由表(VPN网关路由表和VPC路由表)

4.3. 阿里云配置

参考文档:

1、创建VPN网关

2、创建用户网关

3、创建IPsec连接

4、配置路由表

5. 添加节点

经过VPN网络打通,此时阿里云和腾讯云的机器已经可以通过内网IP互相访问了。
此时,直接使用kubeadm join命令添加节点即可。