k8s 安装 Traefik

最后发布时间 : 2026-07-10 09:31:29 浏览量 :

在 Kubernetes 中安装 Flannel 后安装 Traefik 没有冲突。Flannel 负责 Pod 网络(CNI),Traefik 负责 Ingress 流量入口,二者职责不同:

helm template traefik traefik/traefik \
  -n traefik \
  --set image.repository=registry.cn-hangzhou.aliyuncs.com/wybioinfo/traefik \
  --set image.tag=v3.7.6
helm upgrade traefik traefik/traefik \
  -n traefik \
  --set image.repository=registry.cn-hangzhou.aliyuncs.com/wybioinfo/traefik \
  --set image.tag=v3.7.6

 kubectl get all -n traefik
                    外部请求
                       |
                       v
                 NodeIP:80/443
                       |
                  Traefik Pod
                       |
              Kubernetes Service
                       |
                  应用 Pod
                       |
                  Flannel 网络

下面以 kubeadm + Flannel 集群为例。


1. 确认 Flannel 正常

先确认节点 Ready:

kubectl get nodes

应该:

NAME      STATUS   ROLES
master    Ready    control-plane
worker1   Ready

确认 Flannel:

kubectl get pods -A | grep flannel

例如:

kube-flannel   kube-flannel-ds-xxxxx   Running

方法一:使用 Helm 安装 Traefik(推荐)

2. 安装 Helm(如果没有)

检查:

helm version

没有则安装:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

3. 添加 Traefik Helm 仓库

helm repo add traefik https://traefik.github.io/charts

更新:

helm repo update

4. 创建 namespace

kubectl create namespace traefik

5. 安装 Traefik

最简单:

helm install traefik traefik/traefik \
  --namespace traefik

等待:

kubectl get pods -n traefik

正常:

NAME                       READY
traefik-xxxxx              1/1 Running

6. 查看 Service

kubectl get svc -n traefik

默认:

NAME      TYPE
traefik   LoadBalancer

在裸机 kubeadm 环境通常:

EXTERNAL-IP <pending>

因为没有云 LoadBalancer。


裸机 kubeadm 推荐配置:NodePort 或 hostNetwork

方案 A:NodePort(简单)

修改:

helm upgrade traefik traefik/traefik \
  -n traefik \
  --set service.type=NodePort

查看:

kubectl get svc -n traefik

例如:

80:30080/TCP
443:30443/TCP

访问:

http://NodeIP:30080

方案 B:hostNetwork(生产常用)

让 Traefik 直接监听节点 80/443:

创建:

traefik-values.yaml

deployment:
  hostNetwork: true

service:
  type: ClusterIP

ports:
  web:
    port: 80
    expose:
      default: true
  websecure:
    port: 443
    expose:
      default: true

安装:

helm upgrade --install traefik \
  traefik/traefik \
  -n traefik \
  -f traefik-values.yaml

此时:

Node:80
   |
   v
Traefik Pod

7. 测试 Ingress

部署 nginx:

kubectl create deployment nginx \
 --image=nginx

创建 Service:

kubectl expose deployment nginx \
 --port=80

创建 ingress:

nginx-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
spec:
  ingressClassName: traefik
  rules:
  - host: nginx.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80

应用:

kubectl apply -f nginx-ingress.yaml

查看:

kubectl get ingress

本机测试:

修改 /etc/hosts

加入:

192.168.3.60 nginx.local

访问:

http://nginx.local

应该看到 nginx 页面。


检查 Traefik 是否工作

查看:

kubectl get ingressclass

应该:

NAME      CONTROLLER
traefik   traefik.io/ingress-controller

查看 Traefik 日志:

kubectl logs -n traefik deploy/traefik

正常:

Configuration received
Starting provider KubernetesIngress

对你当前 kubeadm + Flannel 环境推荐

你的环境之前是:

  • kubeadm
  • Flannel CNI
  • 单节点/小集群测试
  • 可能使用 cri-dockerd

建议:

Flannel
   |
   |
Traefik (hostNetwork)
   |
Ingress
   |
你的 App/RStudio/FastAPI

安装方式:

helm upgrade --install traefik traefik/traefik \
  -n traefik \
  --create-namespace \
  --set deployment.hostNetwork=true

这样后续给你的 BRAVE 平台部署 RStudio、FastAPI、React 等服务时,可以直接通过 Ingress 路由。