1. 问题描述

Traefik v2 服务部署文件的简单描述:
将 Traefik 绑定到固定一台机器上,并使用 hostnetwork 与主机共享网络,使用主机的 80、443 端口绑定到容器的 web、websecure;

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: traefik
  5. spec:
  6. template:
  7. spec:
  8. nodeSelector:
  9. kubernetes.io/hostname: server-3
  10. hostNetwork: true
  11. containers:
  12. - image: 10.5.32.58:8888/devops/traefik:2.3
  13. name: traefik
  14. ports:
  15. - name: web
  16. containerPort: 80
  17. hostPort: 80
  18. - name: websecure
  19. containerPort: 443
  20. hostPort: 443
  21. args:
  22. - --log.level=DEBUG
  23. - --accesslog
  24. - --entryPoints.web.address=:80
  25. - --entryPoints.websecure.address=:443
  26. - --api=true
  27. - --api.dashboard=true
  28. - --ping=true
  29. - --providers.kubernetesingress
  30. - --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