导致原本的 Nginx 443(以及 80)端口无法访问,是因为 K3s 默认集成了 Traefik Ingress 控制器和 ServiceLB 负载均衡器。它们在后台通过 iptables 强行接管了宿主机的 80 和 443 端口流量。即便用 lsof 或 netstat 查不到特定进程占用,流量也已经被 K3s 的虚拟网卡拦截并导向了内部容器。要解决这个问题,可以通过禁用 K3s 默认的 Traefik 来彻底释放 80/443 端口,让流量重新回到原本的物理机 Nginx 上。具体修复步骤如下:

1. 修改 K3s 启动配置文件

编辑或创建 K3s 的默认配置文件:

sudo mkdir -p /etc/rancher/k3s
sudo nano /etc/rancher/k3s/config.yaml

在文件中添加以下内容,明确禁用内置的 traefik 路由服务:

disable:
  - traefik

2. 清理已被 K3s 部署的资源

为了确保残留的组件不会继续抢占端口,需要在 K3s 内部将其删除(K3s 停止前操作):

# 删除内部现有的 traefik 控制器定义
sudo k3s kubectl -n kube-system delete helmcharts.helm.cattle.io traefik

3. 重启 K3s 服务使配置生效

# 重启 K3s 容器编排引擎
sudo systemctl restart k3s

4. 恢复物理机 Nginx 服务

在 K3s 释放端口后,重新启动或加载您原本的 Nginx 服务:

# 检查 Nginx 配置是否正确
sudo nginx -t

# 重新启动 Nginx
sudo systemctl restart nginx

5、如果只有k3s.yaml就要创建config.yaml

# 1. 创建并写入配置文件
sudo tee /etc/rancher/k3s/config.yaml <<EOF
disable:
  - traefik
EOF

# 2. 重启 K3s 服务让配置生效
sudo systemctl restart k3s

# 3. 尝试重启您原本的 Nginx
sudo systemctl restart nginx
Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐