前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TraefikIngressRoute配置

TraefikIngressRoute配置

作者头像
mikelLam
发布2022-10-31 14:46:47
5380
发布2022-10-31 14:46:47
举报
文章被收录于专栏:Kubernetes 与 Devops 干货分享
https://tc.ctq6.cn/tc/overview.png
https://tc.ctq6.cn/tc/overview.png

使用helm安装traefik

添加traefik仓库

代码语言:shell
复制
helm repo add traefik https://helm.traefik.io/traefik
helm repo update

安装traefik

代码语言:shell
复制
kubectl create ns traefik-v2
helm upgrade --install -n kube-system traefik traefik/traefik 

暴露traefik的dashboard

端口说明: 8080是dashboard 80是http入口 443是https入口

通过配置traefik ui配置dashboard

配置traefik webui为IngressRoute资源, 配置文件文件的如下(traefik-ui.yaml):

代码语言:yaml
复制
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-webui-tls
  namespace: kube-system
spec:
  entryPoints:
  - websecure  # 注意这里是websecure这个entryPoint,监控443端口
  tls:
    certResolver: foo
    domains:
     - main: "ctq6.cn"
       sans:
         - "*.ctq6.cn"
    passthrough: false
    options:
      name: tlsoption
      namespace: kube-system
  routes:
  - match: Host(`traefik-uat.`) && PathPrefix(`/`)
    kind: Rule
    services:
    - name: traefik
      port: 8080

直接执行下面命令创建资源:

代码语言:shell
复制
kubectl apply -f traefik-ui.yaml

通过域名访问traefik仪表盘

https://tc.ctq6.cn/tc/traefik.png
https://tc.ctq6.cn/tc/traefik.png

Traefik IngressRoute 资源配置

下面有一个nginx应用

代码语言:yaml
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx-test
          ports:
            - name: http
              containerPort: 80
          image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-test
  namespace: kube-system
spec:
  selector:
    app: nginx
    test: "true"
  type: ClusterIP
  ports:
    - name: web
      port: 80
      targetPort: http

让我们通过IngressRoute来配置一个规则

代码语言:yaml
复制
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-test
  namespace: kube-system
spec:
  entryPoints:
    # 指定入口点为web。这里的web就是traefik静态配置(启动参数)中的 --entryPoints.web.address=:8080,通过仪表盘也可以看到
    - web
  routes:
    - kind: Rule
      match: Host(`localhost.cluster`) # 匹配规则,第三部分说明
      services:
        - name: nginx-test
          port: 80

现在将入口web暴露出来,通过8080端口访问:

代码语言:shell
复制
kubectl port-forward --address=0.0.0.0 -n traefik-v2 $(kubectl get pods -n traefik-v2 --selector "app.kubernetes.io/name=traefik" --output=name) 8080:8080

在本地做host解析 x.x.x.x localhost.cluster

现在可以直接打开localhost.cluster:8080, 可以看到nginx已经正常访问

https://tc.ctq6.cn/tc/743072421.png
https://tc.ctq6.cn/tc/743072421.png

路由匹配规则

  • Headers(key, value): 判断请求头是否存在,key是请求头名称,value是值
  • HeadersRegexp(key, regexp): 同上,可以使用正则来匹配
  • Host(example.com, …): 检查请求Host请求头,判断其值是否为给定之一
  • HostHeader(example.com, …): 同上
  • HostRegexp(example.com, {subdomain:[a-z]+}.example.com, …): 同上,可以使用正则
  • Method(GET, …): 检查请求方法是否为给定的一个methods(GET,POST,PUT,DELETE,PATCH)
  • Path(/path, /articles/{cat:[a-z]+}/{id:[0-9]+}, …): 匹配确切的请求路径。接受正则表达式
  • PathPrefix(/products/, /articles/{cat:[a-z]+}/{id:[0-9]+}): 匹配请求前缀路径。接受正则表达式
  • Query(foo=bar, bar=baz): 匹配查询字符串参数

注意点:

代码语言:shell
复制
为了与Host和Path表达式一起使用正则表达式,必须声明一个任意命名的变量,后跟用冒号分隔的正则表达式,所有这些都用花括号括起来。例如/posts/{id:[0-9]+},id为变量名
您可以使用AND(&&)和OR(||)运算符组合多个匹配器。您也可以使用括号。
规则评估后可以使用中间件,在请求被转发到服务之前对规则进行评估

https配置

生成证书secret

代码语言:shell
复制
kubectl create secret tls nginx-test --cert=tls.crt --key=tls.key

修改之前的IngressRoute

代码语言:shell
复制
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-test
  namespace: kube-system
spec:
  entryPoints:
    # 指定入口点为web。这里的web就是traefik静态配置(启动参数)中的 --entryPoints.web.address=:8080,通过仪表盘也可以看到
    - web
  routes:
    - kind: Rule
      match: Host(`localhost.cluster`) # 匹配规则,第三部分说明
      services:
        - name: nginx-test
          port: 80
  tls:
    secretName: nginx-test

因为不是正常的证书,所以访问过不去

https://tc.ctq6.cn/tc/4030331602.png
https://tc.ctq6.cn/tc/4030331602.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用helm安装traefik
    • 添加traefik仓库
      • 安装traefik
        • 暴露traefik的dashboard
          • 通过配置traefik ui配置dashboard
          • Traefik IngressRoute 资源配置
          • 路由匹配规则
          • https配置
            • 生成证书secret
              • 修改之前的IngressRoute
              相关产品与服务
              消息队列 TDMQ
              消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档