1. 问题描述
Traefik v2 服务部署文件的简单描述:
将 Traefik 绑定到固定一台机器上,并使用 hostnetwork 与主机共享网络,使用主机的 80、443 端口绑定到容器的 web、websecure;
apiVersion: apps/v1
kind: Deployment
metadata:
name: traefik
spec:
template:
spec:
nodeSelector:
kubernetes.io/hostname: server-3
hostNetwork: true
containers:
- image: 10.5.32.58:8888/devops/traefik:2.3
name: traefik
ports:
- name: web
containerPort: 80
hostPort: 80
- name: websecure
containerPort: 443
hostPort: 443
args:
- --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