k8s部署Traefik

本文介绍Kubernetes中的Ingress概念及其作用,详细阐述如何使用Traefik作为Ingress Controller进行部署,实现从集群外部访问内部服务。通过创建ingress-rbac.yaml、DaemonSet、ingress和Traefik UI,完成Traefik的配置和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ingress:

ingress是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡方向代理服务器,其中还包括规则定义,即URL的路由信息,路由信息得的刷新由Ingress controller来提供。

Ingress Controller 实质上可以理解为是个监视器,Ingress Controller 通过不断地跟 kubernetes API 打交道,实时的感知后端 service、pod 等变化,比如新增和减少 pod,service 增加与减少等;当得到这些变化信息后,Ingress Controller 再结合下文的 Ingress 生成配置,然后更新反向代理负载均衡器,并刷新其配置,达到服务发现的作用。

Traefik

Traefik是一款开源的反向代理与负载均衡工具。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。

部署Traefik

①创建ingress-rbac.yaml.将用于service account验证。
apiVersion: v1
kind: ServiceAccount
metadata:
  name: ingress
  namespace: default

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: ingress
subjects:
  - kind: ServiceAccount
    name: ingress
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
②创建DaemonSet

我们使用DaemonSet类型来部署Traefik,并使用nodeSelector来限定Traefik所部署的主机。

kubectl label nodes 172.20.0.113 edgenode=true
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: traefik-ingress-lb
  namespace: default
  labels:
    k8s-app: traefik-ingress-lb
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      restartPolicy: Always
      serviceAccountName: ingress
      containers:
      - image: traefik
        name: traefik-ingress-lb
        resources:
          limits:
            cpu: 600m
            memory: 90Mi
          requests:
            cpu: 300m
            memory: 90Mi
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8580
          hostPort: 8580
        args:
        - --web
        - --web.address=:8580
        - --kubernetes
      nodeSelector:
        edgenode: "true"
③创建名为traefik-ingress的ingress,文件名ingress.yaml

首先,我们先创建一个pod和一个services,为负载做准备

//创建pod
kubectl run first-deployment --image=katacoda/docker-http-server --port=80
//创建对应services
kubectl expose deployment first-deployment --port=80

在这里插入图片描述在这里插入图片描述
之后,定义一个ingress实现负载

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: default
spec:
  rules:
  - host: traefik.nginx.io
    http:
      paths:
      - path: /
        backend:
          serviceName: first-deployment
          servicePort: 80
④Traefik UI

使用下面的yaml配置来创建Traefik的Web UI。

apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: default
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - name: web
    port: 80
    targetPort: 8580
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: default
spec:
  rules:
  - host: traefik-ui.local
    http:
      paths:
      - path: /
        backend:
          serviceName: traefik-web-ui
          servicePort: web

⑤启动

kubectl create -f .

启动之后,发现多了ingress和daemonSet
在这里插入图片描述在这里插入图片描述
在浏览器中测试,说明部署正确
在这里插入图片描述
左侧黄色部分部分列出的是所有的rule,右侧绿色部分是所有的pod

测试是否真能够集群外访问:

在集群的任意一个节点上执行。假如我要访问traefik.nginx.io

curl -H Host:traefik.nginx.io http://192.168.204.144/

在这里插入图片描述
如果你需要在kubernetes集群以外访问就需要设置DNS,或者修改主机(集群外的机器)的hosts文件。文件在/etc/hosts

192.168.204.144 traefik.nginx.io

访问traefik.nginx.io这些地址的流量都会发送给192.168.204.144这台主机,就是我们启动traefik的主机。

Traefik会解析http请求header里的Host参数将流量转发给Ingress配置里的相应service。

修改hosts后就就可以在kubernetes集群外访问以上service,如下图:
在这里插入图片描述

Kubernetes (k8s) 版本1.31中部署Traefik v3,这是一个流行的开源负载均衡和边缘网络代理,可以帮助管理和路由微服务架构中的请求。以下是简要步骤: 1. **安装CRDs**: - Traefik v3使用Custom Resource Definitions (CRDs),确保你已经在集群中安装了 Traefik Operator。你可以从Crane仓库下载并应用CRDs:`kubectl apply -f https://raw.githubusercontent.com/helm/traefik/v3.7/operator.yaml` 2. **创建配置文件**: - 编辑一个yaml文件,如`traefik-traefikv3.yaml`,定义Traefik的Deployment和Service资源,包括所需的镜像、标签等信息,以及任何你需要的Ingress资源定义。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: traefik-v3 spec: replicas: 1 selector: matchLabels: app: traefik template: metadata: labels: app: traefik spec: containers: - name: traefik image: traefik:v3.7 command: - "--log.level=DEBUG" - "--api.insecure=true" # 开启API调试模式,正式环境应移除 - "--providers.kubernetes ingress" --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: traefik-ingress spec: rules: - host: "your-domain.com" http: paths: - path: / pathType: Prefix backend: service: name: your-service-name port: number: 80 ``` 请替换 `your-domain.com` 和 `your-service-name` 为你实际的应用域名和服务名称。 3. **部署k8s**: - 使用`kubectl`命令将配置文件应用到集群: ``` kubectl apply -f traefik-traefikv3.yaml ``` 4. **验证和测试**: - 确认 Traefik 是否正在运行,检查其状态: ``` kubectl get pods -n default | grep traefik ``` - 访问 `http://your-cluster-ip:8080` 来确认 Traefik 的健康状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值