解决安装了k3s以后80和443端口被占用的问题

问题描述

今天服务器安装了一个k3s,该服务器的其他服务就都访问不了了,查了一下是因为k3s默认会安装traefik来替代k8s的ingress来代理流量,此时默认情况会占据系统的 80 和 443 端口。
并且很奇怪的是lsof -i:80 都查不到traefik这个端口。因为通过iptables来转发流量所以lsof不会找到该应用,因为接管80/443端口的是service而不是traefik这个pod

为啥k3s安装了以后80和443端口会被占用

k3s在默认情况下会安装Traefik作为替代Kubernetes Ingress的默认代理器来处理流量。Traefik是一个流行的反向代理和负载均衡器,它可以通过路由规则将流量转发到相应的后端服务。

在k3s中,Traefik会监听系统的80端口和443端口,并将流量路由到相应的服务。这意味着在k3s集群中,如果您已经有其他应用程序在使用这些端口,它们将被Traefik占用。如果您希望使用其他端口或禁用Traefik的默认配置,您可以进行相应的配置更改。

请注意,具体的配置方式可能因k3s的版本和您的部署环境而有所不同。建议查阅k3s的文档或社区资源以获取更详细的配置信息和操作指南。

如果您使用iptables来转发流量,并且将80/443端口的流量接管给了服务(Service),而不是直接给Traefik Pod,那么确实lsof命令可能无法直接找到Traefik应用程序。

为啥lsof命令可能无法显示Traefik的进程

lsof(List Open Files)是一个用于列出系统中打开文件的工具,它可以显示正在使用某个端口的进程。然而,由于Traefik在这种情况下是通过Kubernetes Service进行流量转发的,它并不直接在80/443端口上监听连接,而是由iptables规则将流量转发到相应的Service。因此,lsof命令可能无法显示Traefik的进程。

要查看Traefik的相关信息,您可以尝试以下方法:

  1. 使用Kubernetes命令行工具(kubectl)查看Traefik的Pod和相关服务:

    kubectl get pods --all-namespaces | grep traefik
    kubectl get services --all-namespaces | grep traefik
    

    这将显示与Traefik相关的Pod和服务的详细信息,包括名称、命名空间等。

  2. 检查Traefik的日志输出。您可以使用以下命令获取Traefik Pod的日志:

    kubectl logs  -n 
    

    替换为您的Traefik Pod的名称,为Pod所在的命名空间。

通过查看Traefik Pod的日志,您应该能够获取到有关Traefik的详细信息和流量转发的日志记录。

请注意,具体的命令和操作可能因您的部署环境和配置而有所不同。以上提供的是一般的指导,建议根据您的实际情况进行相应的调整和查询。

如何禁用Traefik

参考这个解决方案:https://github.com/k3s-io/k3s/issues/1160#issuecomment-1115803175
以下是在初始设置期间禁用Traefik所需执行的步骤:

  1. 删除Traefik的Helm Chart资源:kubectl -n kube-system delete helmcharts.helm.cattle.io traefik
  2. 停止k3s服务:sudo service k3s stop
  3. 编辑服务文件:sudo nano /etc/systemd/system/k3s.service,并在ExecStart行中添加以下内容:
    –no-deploy traefik
    k3s.service文件:
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
After=network-online.target

[Install]
WantedBy=multi-user.target

[Service]
Type=notify
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service'
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s \
    server \
    --disable=traefik \
  1. 重新加载服务文件:sudo systemctl daemon-reload
  2. 从自动部署文件夹中删除清单文件:sudo rm /var/lib/rancher/k3s/server/manifests/traefik.yaml
  3. 启动k3s服务:sudo service k3s start

以上步骤将禁用并删除Traefik。请注意,执行这些步骤可能会对您的系统产生影响,请确保在进行更改之前备份重要数据,并确保您理解所采取操作的后果。

你可能感兴趣的:(#,运维,kubernetes,docker,运维)