Skip to main content
  1. 闲来无事 温雪煮茶/

k3s

·2 mins·
Table of Contents

k3s 混合云部署
#

分享在不同的服务商 构建轻量化k8s集群k3s 的教程 并通过配置 转发实现 双栈访问以及可控面板

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

这里会有一个要配置域名的我的建议是配置自己的域名而不是使用他提供的,按照解析要求解析到管理的地址上面

image-20240821232341106

跟着教程走完就可以了然后打开面板去添加网络 添加设备

image-20240821232744261image-20240821232929157

然后我们就获得了一堆在同一个虚拟网段的主机,我们可以手动的去控制之间的连通以及查看状态

后续我们就需要去安装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;
    }
}

至此 我们实现了自己的双栈使用

image-20240924201139835

Sianao
Author
Sianao
a backend developer

Related

golang
·8 mins
Golang
systemd
·4 mins