k3s 混合云部署 #
分享在不同的服务商 构建轻量化k8s集群k3s 的教程 并通过配置 转发实现 双栈访问以及可控面板
前言 #
- K3s 是轻量级的 Kubernetes。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。
- netmaker: WireGuard® automation from homelab to enterprise
对于目前来说我有四台机子,两台香港的,两台洛杉矶的,只有两台机子有ipv6
的地址,对于香港的机子来说有一台是阿里云,不是经典网络,直接解析是获取到的内部的ip
地址,直接用公网地址我觉得又有一点不太安全所以使用netmaker
来构建内部网络,同时使用netmaker
提供了便携的面板来控制和观察自己的服务
- 规划
- 有一台2C6G 不限流量洛杉矶
- 一台1C1G的香港机子
双栈
- 一台1C2G的洛杉矶
双栈
- 阿里云香港
VPC
网络
局域网构建 #
netmaker #
对于netmaker来说可以直接使用他们的脚本然后自己手动降级成社区版本
sudo wget -qO /root/nm-quick.sh https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/nm-quick.sh
sudo chmod +x /root/nm-quick.sh && sudo /root/nm-quick.sh
这里会有一个要配置域名的我的建议是配置自己的域名而不是使用他提供的,按照解析要求解析到管理的地址上面
跟着教程走完就可以了然后打开面板去添加网络 添加设备
然后我们就获得了一堆在同一个虚拟网段的主机,我们可以手动的去控制之间的连通以及查看状态
后续我们就需要去安装k3s了
k3s 搭建 #
节点创建 #
按照文档 大体是这样有一点需要注意的是需要自己指定nodeip
避免获取的是不是自己构建的局域网的ip
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \
--cluster-init \
--node-ip=0.0.0.0
节点加入 #
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="agent" sh -s - --token xxxx --node-ip xxx --server https://xxxx:6443
这样我们就配置好了我们的k3s
集群,现在就可以开始上服务了,习惯性给装一个traefik
作为网关
DualStack 双栈使用 #
对于使用双栈 我们不能直接使用集群的双栈 因为有的集群没有ipv6地址 所以我们采用外部网关机器来部署 转发到traefik 同时使用 head传递真实ip
修改traefik svc 参数
ipFamilyPolicy: PreferDualStack
ports:
- name: web
port: 880
protocol: TCP
targetPort: web
- name: websecure
port: 8443
protocol: TCP
targetPort: websecure
外部使用nginx作为网关机器进行转发
server {
gzip on;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_tokens off;
ssl_certificate xxx.cer;
ssl_certificate_key xxx.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
ssl_dhparam /home/ssl/dhparam;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
location / {
proxy_pass http://xxxx:880 ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
至此 我们实现了自己的双栈使用