You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置使K3S内置Traefik仅可通过Wireguard VPN访问?

解决方案:让K3S内置Traefik仅通过Wireguard访问

以下是三个可行的方案,针对你遇到的K3S iptables冲突、Traefik监听配置问题给出具体操作:

方案1:修改Traefik配置,仅监听Wireguard接口IP

K3S内置的Traefik通过Helm部署,可通过自定义values.yaml限制其监听的IP地址:

  1. 先获取Wireguard接口的IP(假设接口名为wg0):
    ip addr show wg0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1
    
    得到类似10.0.0.1的IP地址。
  2. 创建自定义配置文件traefik-custom-values.yaml:
    entryPoints:
      web:
        address: "10.0.0.1:80"
      websecure:
        address: "10.0.0.1:443"
    ports:
      web:
        hostPort: 80
        hostIP: 10.0.0.1
      websecure:
        hostPort: 443
        hostIP: 10.0.0.1
    
    把10.0.0.1替换为你的Wireguard实际IP。
  3. 升级Traefik的Helm实例:
    kubectl -n kube-system upgrade --install traefik traefik/traefik -f traefik-custom-values.yaml
    
    操作完成后,Traefik只会在Wireguard的IP上监听80/443端口,公网IP不会有监听,自然只能通过VPN访问。

方案2:直接添加iptables规则,限制Traefik端口的访问来源

由于K3S会自动管理iptables,UFW规则容易冲突,直接操作iptables更可靠:

  1. 假设你的Wireguard子网是10.0.0.0/24,执行以下规则:
    # 允许Wireguard子网访问Traefik的80和443端口
    iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 443 -j ACCEPT
    # 拒绝所有其他来源访问这两个端口
    iptables -A INPUT -p tcp --dport 80 -j DROP
    iptables -A INPUT -p tcp --dport 443 -j DROP
    
  2. 保存iptables规则,避免重启后失效(以Debian/Ubuntu为例):
    iptables-save > /etc/iptables/rules.v4
    
    这样即使Traefik监听公网IP,外部流量也会被iptables拦截,只有VPN内的机器能访问。

方案3:将Traefik改为ClusterIP,通过Wireguard接口的反向代理访问

  1. 修改Traefik的Service类型为ClusterIP,取消公网监听:
    kubectl -n kube-system patch service traefik -p '{"spec":{"type":"ClusterIP"}}'
    
  2. 在主机上安装Nginx(或其他反向代理),创建配置文件/etc/nginx/sites-available/traefik-proxy:
    server {
        listen 10.0.0.1:80;
        server_name your-domain.local; # 可选,用VPN内的域名
    
        location / {
            proxy_pass http://traefik.kube-system.svc.cluster.local:80;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
    
  3. 启用配置并重启Nginx:
    ln -s /etc/nginx/sites-available/traefik-proxy /etc/nginx/sites-enabled/
    systemctl restart nginx
    
    此时只有VPN内的机器访问10.0.0.1:80时,会被转发到Traefik,公网无法触及。

内容的提问来源于stack exchange,提问作者Buttercreme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:46:31