k8s之Traefik

一、Traefik与Ingress在Kubernetes环境中的对比

1.1、Ingres

Ingres,它充当了集群外部访问集群内部服务的入口,相当于service的service

ingress就是ingress控制器,用yaml文件或者配置一个资源对象,通过ingtoss资源对象来告诉在哪一个控制器上,用户请求的这个域名。然后对接哪一个service

Ingress Controller是Ingress的实现,用于处理进入集群的流量,并根据Ingress规则将流量路由到相应的Service。

核心目的就是把数据搞到service上

Ingress Controller可以基于不同的技术实现,如nginx、haproxy等。其中,nginx作为最常用的反向代理服务器之一,通过Ingress Controller与Kubernetes API交互,实时获取后端Service、Pod等的变化,并动态更新nginx配置,以实现服务发现。

然而,Ingress在动态配置和微服务集成方面存在一定的局限性。Ingress Controller需要不断与Kubernetes API交互,获取后端服务的最新状态,并在nginx配置中进行更新。这个过程可能会带来一定的延迟,影响服务发现的效率。此外,Ingress对于微服务的支持相对较弱,需要额外的配置和集成工作。

有延迟在微服务方面不友好

1.2、Traefik

Traefik在动态配置和微服务集成方面具有更好的表现。

Traefik本身设计为一个开源的反向代理与负载均衡工具,能够与常见的微服务系统直接整合,实现自动化动态配置。

Traefik能够实时跟Kubernetes API交互,感知后端Service、Pod等的变化,自动发现并自动更新配置并重载。这个过程更加快速方便,减少了人工干预和配置错误的可能性。

但是,由于Traefik本身是一个独立的工具,需要单独部署和管理,可能会增加一定的运维成本。此外,虽然Traefik对微服务架构的支持较好,但在某些情况下可能需要额外的配置和集成工作,而且目前资料比较少。

二、traefik 部署

2.1、部署方式

traefik 部署在 k8s 上分为 daemonset 和 deployment 两种方式,各有优缺点:

  • daemonset 能确定有哪些 Node 在运行 traefik,所以可以确定的知道后端 ip,但是不能方便的伸缩。
  • deployment 可以更方便的伸缩,但是不能确定有哪些 Node 在运行 traefik 所以不能确定的知道后端 ip。

一般部署两种不同类型的 traefik:

面向内部(internal)服务的 traefik,建议可以使用 deployment 的方式。

面向外部(external)服务的 traefik,建议可以使用 daemonset 的方式。

建议使用 traffic-type 标签

traffic-type: external

traffic-type: internal

traefik 相应地使用 labelSelector

traffic-type=internal

traffic-type=external

官方网址: https://docs.traefik.io/

下载源码:git clone https://github.com/containous/traefik.git

国内下载地址https://gitee.com/mirrors/traefik/tags

2.2、部署

1、获取配置文件

mkdir /opt/traefik

cd /opt/traefik

官方下载地址:

wget https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-rbac.yaml

wget https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-deployment.yaml

wget https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-ds.yaml

wget https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/ui.yaml

国内的 gitee:

wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml

wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml

wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml

wget https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml

也可以用【前置资源】

2、依次执行

启用RBAC

kubectl apply -f traefik-rbac.yaml

部署 Traefik 到 Kubernetes 集群,为外部访问创建 NodePorts

kubectl apply -f traefik-deployment.yaml

部署 Traefik Web UI

kubectl apply -f ui.yaml

查看结果

kubectl get svc -o wide -n kube-system | grep traefik

访问 Traefik UI,浏览器访问 http://Nodeip:NodePort/dashboard/

http://192.168.88.21:32020/dashboard/

ingress HTTP 代理访问

cd /opt/ingress-nodeport

创建 deployment、Service、Ingress Yaml 资源

vim ingress-nginx.yaml

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: traefik-app
spec:
  replicas: 2
  selector:
    matchLabels:
      name: traefik-nginx
  template:
    metadata:
      labels:
        name: traefik-nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: traefik-svc
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    name: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: traefik-nginx-test
spec:
  rules:
  - host: www.yc.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: traefik-svc
            port:
              number: 80

kubectl apply -f ingress-nginx.yaml

kubectl get svc,pods -o wide

kubectl exec -it pod/nginx-app-65d7b99f6b-nnw7q bash

cd /usr/share/nginx/html/

echo 'this is web1' >> index.html

kubectl exec -it pod/nginx-app-65d7b99f6b-x47l8 bash

cd /usr/share/nginx/html/

echo 'this is web2' >> index.html

#测试访问

curl 10.96.35.5

kubectl get svc -o wide -n kube-system | grep traefik

本地 host 添加域名解析

vim /etc/hosts

192.168.88.21 node02

192.168.88.21 www.yc.com

模拟外部访问

curl http://www.yc.com:30893

再刷新查看 Traefik UI 界面,会生成刚创建的集群信息

http://192.168.88.21:32020/dashboard/

相关推荐
鋆雨无欢丶28 分钟前
docker证书认证问题
运维·docker·容器
阿杰 AJie29 分钟前
Docker 容器启动的全方位方法汇总
运维·docker·容器
原神启动136 分钟前
K8S(七)—— Kubernetes Pod 基础概念与实战配置
云原生·容器·kubernetes
我的golang之路果然有问题39 分钟前
Docker 之常用操作(实习中的)
java·运维·笔记·docker·容器·eureka
牛奔1 小时前
Docker 容器无法停止的排障与解决全过程
运维·docker·云原生·容器·eureka
赵文宇(温玉)1 小时前
Docker的生态与商业化
docker·容器·eureka
不想画图1 小时前
Kubernetes(五)——rancher部署和Pod详解
linux·kubernetes·rancher
大都督老师1 小时前
配置 containerd 使用镜像加速器拉取 Docker Hub 镜像
容器·kubernetes·k8s
zyu6710 小时前
03-Docker存储和网络
网络·docker·容器
牛奔11 小时前
Docker Compose 两种安装与使用方式详解(适用于 Docker 19.03 版本)
运维·docker·云原生·容器·eureka