问题描述
今天服务器安装了一个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的相关信息,您可以尝试以下方法:
-
使用Kubernetes命令行工具(kubectl)查看Traefik的Pod和相关服务:
kubectl get pods --all-namespaces | grep traefik kubectl get services --all-namespaces | grep traefik
这将显示与Traefik相关的Pod和服务的详细信息,包括名称、命名空间等。
-
检查Traefik的日志输出。您可以使用以下命令获取Traefik Pod的日志:
kubectl logs <traefik-pod-name> -n <namespace>
替换
<traefik-pod-name>
为您的Traefik Pod的名称,<namespace>
为Pod所在的命名空间。
通过查看Traefik Pod的日志,您应该能够获取到有关Traefik的详细信息和流量转发的日志记录。
请注意,具体的命令和操作可能因您的部署环境和配置而有所不同。以上提供的是一般的指导,建议根据您的实际情况进行相应的调整和查询。
如何禁用Traefik
参考这个解决方案:https://github.com/k3s-io/k3s/issues/1160#issuecomment-1115803175
以下是在初始设置期间禁用Traefik所需执行的步骤:文章来源:https://www.toymoban.com/news/detail-667297.html
- 删除Traefik的Helm Chart资源:kubectl -n kube-system delete helmcharts.helm.cattle.io traefik
- 停止k3s服务:sudo service k3s stop
- 编辑服务文件: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 \
- 重新加载服务文件:sudo systemctl daemon-reload
- 从自动部署文件夹中删除清单文件:sudo rm /var/lib/rancher/k3s/server/manifests/traefik.yaml
- 启动k3s服务:sudo service k3s start
以上步骤将禁用并删除Traefik。请注意,执行这些步骤可能会对您的系统产生影响,请确保在进行更改之前备份重要数据,并确保您理解所采取操作的后果。文章来源地址https://www.toymoban.com/news/detail-667297.html
到了这里,关于解决安装了k3s以后80和443端口被占用的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!