1. 问题描述
Traefik v2 服务部署文件的简单描述:
将 Traefik 绑定到固定一台机器上,并使用 hostnetwork 与主机共享网络,使用主机的 80、443 端口绑定到容器的 web、websecure;
apiVersion: apps/v1kind: Deploymentmetadata:name: traefikspec:template:spec:nodeSelector:kubernetes.io/hostname: server-3hostNetwork: truecontainers:- image: 10.5.32.58:8888/devops/traefik:2.3name: traefikports:- name: webcontainerPort: 80hostPort: 80- name: websecurecontainerPort: 443hostPort: 443args:- --log.level=DEBUG- --accesslog- --entryPoints.web.address=:80- --entryPoints.websecure.address=:443- --api=true- --api.dashboard=true- --ping=true- --providers.kubernetesingress- --providers.kubernetescrd
- Traefik 作为 Ingress Controller,会实时的与 Kubernetes API 通信,获取 Ingress 信息;
- Traefik 服务会监听主机 80 端口,接收到请求,根据 URL 与 Service 的对应关系,将请求转发给后端 Service;
2. 解决方案
首先在其他主机上验证主机上 80 端口能够接收到请求,发现没有正常工作,但是可以 ping 通 130 主机:
$ telnet 10.5.32.130 80 Trying 10.5.32.130 ...验证主机上 80 端口是否被 traefik 使用,发现 traefik 服务工作正常:
$ sudo lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME traefik 4352 root 3u IPv6 56756 0t0 TCP *:http (LISTEN)推测应该是重建 k8s 集群(kubeadm reset)时,没有清理路由表,结果重启主机就恢复正常了…
$ sudo shutdown -r now
