背景

个人使用traefik有差不多1-2年时间,kubernetes ingress controller 代理有很多种方式 例如 ingress-nginx kong istio 等等。个人比较习惯traefik。从19年就开始使用。最早使用traefik 不直接使用腾讯云公有云的slb是因为当时slb不能挂载多个证书,而我kubernetes的自建集群实在不想挂载多个slb.就偷懒用了slb udp绑定运行traefik节点的 80 443端口。证书tls的secret 直接挂载在traefik代理层上面。hsts http跳转https的特性都配置在了traefik代理层上面。应用比较少。qps也没有那么高,这样的简单应用就满足了我的需求了

关于traefik的结缘

最早接触traefik是Google上面看ingress controller 找到的 然后再阳明大佬的博客看到了traefik的实践https://www.qikqiak.com/post/traefik2-ga/,还有超级小豆丁的博客http://www.mydlq.club/article/41 。两位大佬的博客是kubernetes初学者的宝藏博客值得收藏拜读。
顺便吐个糟,用的traefik2.4版本… 抄的豆丁大佬的..http://www.mydlq.club/article/107/哈哈哈

ingress controller对比:

参照https://zhuanlan.zhihu.com/p/109458069
Kubernetes 1.20.5 安装traefik在腾讯云下的实践 - 图1

1. Kubernetes Gateway API

v2.4版本的改变(在 Traefik v2.4 版本中增加了对 Kubernetes Gateway API 的支持)一下部分抄自豆丁大佬与官方文档https://gateway-api.sigs.k8s.io/

1、Gateway API 是什么

Gateway API是由SIG-NETWORK 社区管理的一个开源项目。它是在Kubernetes中对服务网络建模的资源的集合。这些资源- ,GatewayClassGatewayHTTPRouteTCPRouteService等-旨在通过表现力,可扩展和面向角色由很多供应商实现的,并具有广泛的行业支持接口演进Kubernetes服务网络。
注意:此项目以前被称为“服务API”,直到2021年2月被重命名为“_Gateway API ”。_

2、Gateway API 的目标

Gateway API 旨在通过提供可表达的,可扩展的,面向角色的接口来改善服务网络,这些接口已由许多供应商实施并获得了广泛的行业支持。
网关 API 是 API 资源(服务、网关类、网关、HTTPRoute、TCPRoute等)的集合。这些资源共同为各种网络用例建模。
Kubernetes 1.20.5 安装traefik在腾讯云下的实践 - 图2
Gateway API 如何根据 Ingress 等当前标准进行改进?

  • 以下设计目标驱动了Gateway API的概念。这些证明了Gateway如何旨在改进Ingress等当前标准。
  • 面向角色-网关由API资源组成,这些API资源对使用和配置Kubernetes服务网络的组织角色进行建模。
  • 便携式-这不是改进,而是应该保持不变。就像Ingress是具有许多实现的通用规范一样 ,Gateway API也被设计为受许多实现支持的可移植规范。
  • 富有表现力-网关API资源支持核心功能,例如基于标头的匹配,流量加权以及其他只能通过自定义批注在Ingress中实现的功能。
  • 可扩展-网关API允许在API的各个层上链接自定义资源。这样就可以在API结构内的适当位置进行精细的自定义。

其他一些值得注意的功能包括:

  • GatewayClasses -GatewayClasses形式化负载平衡实现的类型。这些类使用户可以轻松,明确地了解通过Kubernetes资源模型可以使用的功能。
  • 共享网关和跨命名空间支持-通过允许独立的Route资源绑定到同一网关,它们可以共享负载平衡器和VIP。这允许团队(甚至跨命名空间)在没有直接协调的情况下安全地共享基础结构。
  • 类型化路由和类型化后端-网关API支持类型化路由资源以及不同类型的后端。这使API可以灵活地支持各种协议(例如HTTP和gRPC)和各种后端目标(例如Kubernetes Services,存储桶或函数)。

如果想了解更多内容,可以访问 Kubernetes Gateway API 文档

2. traefik on kubernetes实践

部署完Traefik 应用后,创建外部访问 Kubernetes 内部应用的路由规则,才能从外部访问kubernetes内部应用。Traefik 目前支持三种方式创建路由规则方式,一种是创建 Traefik 自定义 Kubernetes CRD 资源,另一种是创建 Kubernetes Ingress 资源,还有就是 v2.4 版本对 Kubernetes 扩展 API Kubernetes Gateway API 适配的一种方式,创建 GatewayClassGatewayHTTPRoute 资源
注意:这里 Traefik 是部署在 kube-system namespace 下,如果不想部署到配置的 namespace,需要修改下面部署文件中的 namespace 参数。当然了也可以新建一个单独的namespace去部署traefik

1. 创建CRD

参照https://doc.traefik.io/traefik/reference/dynamic-configuration/kubernetes-crd/

traefik-crd.yaml

  1. cat <<EOF > traefik-crd.yaml
  2. apiVersion: apiextensions.k8s.io/v1beta1
  3. kind: CustomResourceDefinition
  4. metadata:
  5. name: ingressroutes.traefik.containo.us
  6. spec:
  7. group: traefik.containo.us
  8. version: v1alpha1
  9. names:
  10. kind: IngressRoute
  11. plural: ingressroutes
  12. singular: ingressroute
  13. scope: Namespaced
  14. ---
  15. apiVersion: apiextensions.k8s.io/v1beta1
  16. kind: CustomResourceDefinition
  17. metadata:
  18. name: middlewares.traefik.containo.us
  19. spec:
  20. group: traefik.containo.us
  21. version: v1alpha1
  22. names:
  23. kind: Middleware
  24. plural: middlewares
  25. singular: middleware
  26. scope: Namespaced
  27. ---
  28. apiVersion: apiextensions.k8s.io/v1beta1
  29. kind: CustomResourceDefinition
  30. metadata:
  31. name: ingressroutetcps.traefik.containo.us
  32. spec:
  33. group: traefik.containo.us
  34. version: v1alpha1
  35. names:
  36. kind: IngressRouteTCP
  37. plural: ingressroutetcps
  38. singular: ingressroutetcp
  39. scope: Namespaced
  40. ---
  41. apiVersion: apiextensions.k8s.io/v1beta1
  42. kind: CustomResourceDefinition
  43. metadata:
  44. name: ingressrouteudps.traefik.containo.us
  45. spec:
  46. group: traefik.containo.us
  47. version: v1alpha1
  48. names:
  49. kind: IngressRouteUDP
  50. plural: ingressrouteudps
  51. singular: ingressrouteudp
  52. scope: Namespaced
  53. ---
  54. apiVersion: apiextensions.k8s.io/v1beta1
  55. kind: CustomResourceDefinition
  56. metadata:
  57. name: tlsoptions.traefik.containo.us
  58. spec:
  59. group: traefik.containo.us
  60. version: v1alpha1
  61. names:
  62. kind: TLSOption
  63. plural: tlsoptions
  64. singular: tlsoption
  65. scope: Namespaced
  66. ---
  67. apiVersion: apiextensions.k8s.io/v1beta1
  68. kind: CustomResourceDefinition
  69. metadata:
  70. name: tlsstores.traefik.containo.us
  71. spec:
  72. group: traefik.containo.us
  73. version: v1alpha1
  74. names:
  75. kind: TLSStore
  76. plural: tlsstores
  77. singular: tlsstore
  78. scope: Namespaced
  79. ---
  80. apiVersion: apiextensions.k8s.io/v1beta1
  81. kind: CustomResourceDefinition
  82. metadata:
  83. name: traefikservices.traefik.containo.us
  84. spec:
  85. group: traefik.containo.us
  86. version: v1alpha1
  87. names:
  88. kind: TraefikService
  89. plural: traefikservices
  90. singular: traefikservice
  91. scope: Namespaced
  92. ---
  93. apiVersion: apiextensions.k8s.io/v1beta1
  94. kind: CustomResourceDefinition
  95. metadata:
  96. name: serverstransports.traefik.containo.us
  97. spec:
  98. group: traefik.containo.us
  99. version: v1alpha1
  100. names:
  101. kind: ServersTransport
  102. plural: serverstransports
  103. singular: serverstransport
  104. scope: Namespaced
  105. EOF
  106. kubectl apply -f traefik-crd.yaml

2. 创建RBAC权限

  1. cat <<EOF > traefik-rbac.yaml
  2. kind: ClusterRole
  3. apiVersion: rbac.authorization.k8s.io/v1beta1
  4. metadata:
  5. name: traefik-ingress-controller
  6. namespace: kube-system
  7. rules:
  8. - apiGroups:
  9. - ""
  10. resources:
  11. - services
  12. - endpoints
  13. - secrets
  14. verbs:
  15. - get
  16. - list
  17. - watch
  18. - apiGroups:
  19. - extensions
  20. - networking.k8s.io
  21. resources:
  22. - ingresses
  23. - ingressclasses
  24. verbs:
  25. - get
  26. - list
  27. - watch
  28. - apiGroups:
  29. - extensions
  30. resources:
  31. - ingresses/status
  32. verbs:
  33. - update
  34. - apiGroups:
  35. - traefik.containo.us
  36. resources:
  37. - middlewares
  38. - ingressroutes
  39. - traefikservices
  40. - ingressroutetcps
  41. - ingressrouteudps
  42. - tlsoptions
  43. - tlsstores
  44. - serverstransports
  45. verbs:
  46. - get
  47. - list
  48. - watch
  49. ---
  50. kind: ClusterRoleBinding
  51. apiVersion: rbac.authorization.k8s.io/v1beta1
  52. metadata:
  53. name: traefik-ingress-controller
  54. roleRef:
  55. apiGroup: rbac.authorization.k8s.io
  56. kind: ClusterRole
  57. name: traefik-ingress-controller
  58. subjects:
  59. - kind: ServiceAccount
  60. name: traefik-ingress-controller
  61. namespace: kube-system
  62. EOF
  63. kubectl apply -f traefik-rbac.yaml

3. 创建 Traefik 配置文件

号后为注释,跟2.X前几个版本一样。增加了kubernetesIngress kubernetesGateway两种路由方式,过去只部署了CRD的方式。

  1. cat <<EOF > traefik-config.yaml
  2. kind: ConfigMap
  3. apiVersion: v1
  4. metadata:
  5. name: traefik-config
  6. namespace: kube-system
  7. data:
  8. traefik.yaml: |-
  9. ping: "" ## 启用 Ping
  10. serversTransport:
  11. insecureSkipVerify: true ## Traefik 忽略验证代理服务的 TLS 证书
  12. api:
  13. insecure: true ## 允许 HTTP 方式访问 API
  14. dashboard: true ## 启用 Dashboard
  15. debug: false ## 启用 Debug 调试模式
  16. metrics:
  17. prometheus: "" ## 配置 Prometheus 监控指标数据,并使用默认配置
  18. entryPoints:
  19. web:
  20. address: ":80" ## 配置 80 端口,并设置入口名称为 web
  21. websecure:
  22. address: ":443" ## 配置 443 端口,并设置入口名称为 websecure
  23. providers:
  24. kubernetesCRD: "" ## 启用 Kubernetes CRD 方式来配置路由规则
  25. kubernetesIngress: "" ## 启用 Kubernetes Ingress 方式来配置路由规则
  26. kubernetesGateway: "" ## 启用 Kubernetes Gateway API
  27. experimental:
  28. kubernetesGateway: true ## 允许使用 Kubernetes Gateway API
  29. log:
  30. filePath: "" ## 设置调试日志文件存储路径,如果为空则输出到控制台
  31. level: error ## 设置调试日志级别
  32. format: json ## 设置调试日志格式
  33. accessLog:
  34. filePath: "" ## 设置访问日志文件存储路径,如果为空则输出到控制台
  35. format: json ## 设置访问调试日志格式
  36. bufferingSize: 0 ## 设置访问日志缓存行数
  37. filters:
  38. #statusCodes: ["200"] ## 设置只保留指定状态码范围内的访问日志
  39. retryAttempts: true ## 设置代理访问重试失败时,保留访问日志
  40. minDuration: 20 ## 设置保留请求时间超过指定持续时间的访问日志
  41. fields: ## 设置访问日志中的字段是否保留(keep 保留、drop 不保留)
  42. defaultMode: keep ## 设置默认保留访问日志字段
  43. names: ## 针对访问日志特别字段特别配置保留模式
  44. ClientUsername: drop
  45. headers: ## 设置 Header 中字段是否保留
  46. defaultMode: keep ## 设置默认保留 Header 中字段
  47. names: ## 针对 Header 中特别字段特别配置保留模式
  48. User-Agent: redact
  49. Authorization: drop
  50. Content-Type: keep
  51. #tracing: ## 链路追踪配置,支持 zipkin、datadog、jaeger、instana、haystack 等
  52. # serviceName: ## 设置服务名称(在链路追踪端收集后显示的服务名)
  53. # zipkin: ## zipkin配置
  54. # sameSpan: true ## 是否启用 Zipkin SameSpan RPC 类型追踪方式
  55. # id128Bit: true ## 是否启用 Zipkin 128bit 的跟踪 ID
  56. # sampleRate: 0.1 ## 设置链路日志采样率(可以配置0.0到1.0之间的值)
  57. # httpEndpoint: http://localhost:9411/api/v2/spans ## 配置 Zipkin Server 端点
  58. EOF
  59. kubectl apply -f traefik-config.yaml

4. 设置节点label标签

Traefix 采用 DaemonSet方式构建,在需要安装的节点上面打上标签,这里在三个work节点都安装上了默认:

  1. kubectl label nodes {sh-work-01,sh-work-02,sh-work-02} IngressProxy=true
  2. kubectl get nodes --show-labels

image.png
image.png
注意:如果想删除标签,可以使用 kubectl label nodes k8s-node-03 IngressProxy- 命令。哈哈哈偶尔需要去掉标签,不调度。

5、安装 Kubernetes Gateway CRD 资源

由于目前 Kubernetes 集群上默认没有安装 Service APIs,我们需要提前安装 Gateway API 的 CRD 资源,需要确保在 Traefik 安装之前启用 Service APIs 资源。

  1. kubectl apply -k "github.com/kubernetes-sigs/service-apis/config/crd?ref=v0.2.0"

不过由于github网络问题,基本无法安装的。我是直接把github上包下载到本地采用本地安装的方式安装
进入
image.png
进入base目录直接全部安装:

  1. kubectl apply -f .

image.png

6. Kubernetes 部署 Traefik

其实我就可以忽略443了….因为我想在slb 哦 对也叫clb.直接做限制。对外只保留80端口。

  1. cat <<EOF > traefik-deploy.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: traefik
  6. namespace: kube-system
  7. spec:
  8. ports:
  9. - name: web
  10. port: 80
  11. - name: websecure
  12. port: 443
  13. - name: admin
  14. port: 8080
  15. selector:
  16. app: traefik
  17. ---
  18. apiVersion: apps/v1
  19. kind: DaemonSet
  20. metadata:
  21. namespace kube-system
  22. name: traefik-ingress-controller
  23. labels:
  24. app: traefik
  25. spec:
  26. selector:
  27. matchLabels:
  28. app: traefik
  29. template:
  30. metadata:
  31. name: traefik
  32. labels:
  33. app: traefik
  34. spec:
  35. serviceAccountName: traefik-ingress-controller
  36. terminationGracePeriodSeconds: 1
  37. containers:
  38. - image: ccr.ccs.tencentyun.com/XXXX/traefik:v2.4.3
  39. name: traefik-ingress-lb
  40. ports:
  41. - name: web
  42. containerPort: 80
  43. hostPort: 80
  44. - name: websecure
  45. containerPort: 443
  46. hostPort: 443
  47. - name: admin
  48. containerPort: 8080
  49. resources:
  50. limits:
  51. cpu: 2000m
  52. memory: 1024Mi
  53. requests:
  54. cpu: 1000m
  55. memory: 1024Mi
  56. securityContext:
  57. capabilities:
  58. drop:
  59. - ALL
  60. add:
  61. - NET_BIND_SERVICE
  62. args:
  63. - --configfile=/config/traefik.yaml
  64. volumeMounts:
  65. - mountPath: "/config"
  66. name: "config"
  67. readinessProbe:
  68. httpGet:
  69. path: /ping
  70. port: 8080
  71. failureThreshold: 3
  72. initialDelaySeconds: 10
  73. periodSeconds: 10
  74. successThreshold: 1
  75. timeoutSeconds: 5
  76. livenessProbe:
  77. httpGet:
  78. path: /ping
  79. port: 8080
  80. failureThreshold: 3
  81. initialDelaySeconds: 10
  82. periodSeconds: 10
  83. successThreshold: 1
  84. timeoutSeconds: 5
  85. volumes:
  86. - name: config
  87. configMap:
  88. name: traefik-config
  89. tolerations: ## 设置容忍所有污点,防止节点被设置污点
  90. - operator: "Exists"
  91. nodeSelector: ## 设置node筛选器,在特定label的节点上启动
  92. IngressProxy: "true
  93. EOF
  94. kubectl apply -f traefik-deploy.yaml

kubectl get pods -n kube-system 验证
image.png

3. 配置路由规则,与腾讯云clb整合

1. slb 绑定traefik http端口

关于腾讯云负载均衡 slb or clb可以参照文档https://cloud.tencent.com/document/product/214了解。过去使用slb用的tcp代理方式有一下原因:

  1. 过去的腾讯云slb不支持一个负载均衡挂载多个证书,个人不想启用多个slb绑定。
  2. 在slb上面配置域名比较麻烦…..没有再traefik配置文件里面写对我个人来说方便。

那我现在怎么就用slb http https代理方式了呢?

  1. 当然了 首先是可以挂载多个证书了
  2. 我在slb上面直接绑定了泛域名,后面的具体域名解析还是在我的traefik配置。但是我不用绑定证书了….
  3. http https的方式我可以把日志直接写入他的cos对象存储和腾讯云自己的日志服务(感觉也是一个kibana)可以直接分析日志啊…..

image.png
综上所述,来实现一下我个人的过程与思路

  1. 创建slb .slb绑定 work节点 80端口(这里我用的是负载均衡型,没有用传统型),没有问题吧?老老实实ipv4了没有启用ipv6这个就看个人具体需求吧。

image.png
image.png
使用了极度不要脸的方式 泛域名….因为我常用的也就这两个域名,具体的解析都还是我自己在traefik配置了。
image.png
关于证书 我这里可是扔好了 两个主二级域名,泛域名证书直接扔上了……
image.png
四个后面配置我都绑定了80交给traefik处理吧。权重我都设置的一样的,有其他需求的可以根据自己需要设置呢。
image.png

2. 配置路由规则

Traefik 应用已经部署完成,并且和slb负载均衡集成也大致完成了。但是想让外部访问 Kubernetes 内部服务,还需要配置路由规则,上面部署 Traefik 时开启了 traefik dashboard,这是 Traefik 提供的视图看板,所以,首先配置基于 httpTraefik Dashboard 路由规则,使外部能够访问 Traefik Dashboard。这里分别使用 CRDIngressKubernetes Gateway API 三种方式进行演示,过去版本常用的是CRD的方式。https的方式我就忽略了交给slb负载均衡层了。

1. CRD方式

过去我个人部署应用都是crd方式,自己老把这种方式叫做ingressroute方式。

  1. cat <<EOF> traefik-dashboard-route-http.yaml
  2. apiVersion: traefik.containo.us/v1alpha1
  3. kind: IngressRoute
  4. metadata:
  5. name: traefik-dashboard-route
  6. namespaces: kube-system
  7. spec:
  8. entryPoints:
  9. - web
  10. routes:
  11. - match: Host(\`traefik.saynaihe.com\`)
  12. kind: Rule
  13. services:
  14. - name: traefik
  15. port: 8080
  16. EOF
  17. kubectl apply -f traefik-dashboard-route-http.yaml

image.png
关于 match: Host(`traefik.saynaihe.com`) 加转义符应该都能看明白了,不加转义符会是这样的
image.png
我貌似又忘了加namespace 截图中,实际我可是加上了…老容易往事。哎,我不是两个泛域名吗 ? 特意做了两个ingressoute 做下测试
image.png
然后绑定本地hosts绑定host

  1. C:\Windows\System32\drivers\etc

image.png
遮挡的有点多….但是 这就是两个都路由过来了啊
image.png
关于https可以忽略了直接挂载在slb层了啊。然后http 强制跳转 https也可以在slb层上面配置了
image.png
流氓玩法强跳….测试也是成功的….
image.png

2. Ingress方式

ingress的方式基本就是https://kubernetes.io/zh/docs/concepts/services-networking/ingress/ kubernetes 常见的ingress方式吧?
继续拿dashboard做演示

  1. cat <<EOF> traefik-dashboard-ingress.yaml
  2. apiVersion: networking.k8s.io/v1
  3. kind: Ingress
  4. metadata:
  5. name: traefik-dashboard-ingress
  6. namespace: kube-system
  7. annotations:
  8. kubernetes.io/ingress.class: traefik
  9. traefik.ingress.kubernetes.io/router.entrypoints: web
  10. spec:
  11. rules:
  12. - host: traefik1.saynaihe.com
  13. http:
  14. paths:
  15. - pathType: Prefix
  16. path: /
  17. backend:
  18. service:
  19. name: traefik
  20. port:
  21. number: 8080
  22. EOF
  23. kubectl apply -f traefik-dashboard-ingress.yaml

image.png
由于端口强制跳转了设置,直接https了哈哈哈验证完成
image.png

3、方式三:使用 Kubernetes Gateway API

关于Kubernetes Gateway API 可以通过CRD 方式创建路由规则
CRD 自定义资源强调一下
详情可以参考:https://doc.traefik.io/traefik/v2.4/routing/providers/kubernetes-gateway/

  • GatewayClass: GatewayClass 是基础结构提供程序定义的群集范围的资源。此资源表示可以实例化的网关类。一般该资源是用于支持多个基础设施提供商用途的,这里我们只部署一个即可。
  • Gateway: Gateway 与基础设施配置的生命周期是 1:1。当用户创建网关时,GatewayClass 控制器会提供或配置一些负载平衡基础设施。
  • HTTPRoute: HTTPRoute 是一种网关 API 类型,用于指定 HTTP 请求从网关侦听器到 API 对象(即服务)的路由行为。

image.png

1. 创建 GatewayClass

#创建 GatewayClass 资源 kubernetes-gatewayclass.yaml 文件
参照: https://doc.traefik.io/traefik/v2.4/routing/providers/kubernetes-gateway/#kind-gatewayclass

  1. cat <<EOF> kubernetes-gatewayclass.yaml
  2. kind: GatewayClass
  3. apiVersion: networking.x-k8s.io/v1alpha1
  4. metadata:
  5. name: traefik
  6. spec:
  7. # Controller is a domain/path string that indicates
  8. # the controller that is managing Gateways of this class.
  9. controller: traefik.io/gateway-controller
  10. EOF
  11. kubectl apply -f kubernetes-gatewayclass.yaml

2 配置 HTTP 路由规则 (Traefik Dashboard 为例)

创建 Gateway 资源 http-gateway.yaml 文件

  1. cat <<EOF> http-gateway.yaml
  2. apiVersion: networking.x-k8s.io/v1alpha1
  3. kind: Gateway
  4. metadata:
  5. name: http-gateway
  6. namespace: kube-system
  7. spec:
  8. gatewayClassName: traefik
  9. listeners:
  10. - protocol: HTTP
  11. port: 80
  12. routes:
  13. kind: HTTPRoute
  14. namespaces:
  15. from: All
  16. selector:
  17. matchLabels:
  18. app: traefik
  19. EOF
  20. kubectl apply -f http-gateway.yaml

创建 HTTPRoute 资源 traefik-httproute.yaml 文件

  1. cat <<EOF> traefik-httproute.yaml
  2. apiVersion: networking.x-k8s.io/v1alpha1
  3. kind: HTTPRoute
  4. metadata:
  5. name: traefik-dashboard-httproute
  6. namespace: kube-system
  7. labels:
  8. app: traefik
  9. spec:
  10. hostnames:
  11. - "traefi2.saynaihe.com"
  12. rules:
  13. - matches:
  14. - path:
  15. type: Prefix
  16. value: /
  17. forwardTo:
  18. - serviceName: traefik
  19. port: 8080
  20. weight: 1
  21. EOF
  22. kubectl apply -f traefik-httproute.yaml

这里就出问题了…..,无法访问,仔细看了下文档https://doc.traefik.io/traefik/providers/kubernetes-gateway/
image.png
全部删除一次重新部署吧将2.5中版本变成v0.1.0就好了….图就不上了基本步骤是一样的。
image.png
注: 都没有做域名解析,本地绑定了host。 saynaihe.com域名只是做演示。没有实际搞….因为我没有做备案。现在不备案的基本绑上就被扫描到封了。用正式域名做的试验。另外养成的习惯用CRD习惯了…部署应用基本个人都用了CRD的方式 —-ingressroute。ingress的方式是更适合从ingress-nginx迁移到traefik使用了。至于Kubernetes Gateway API个人还是图个新鲜,没有整明白。v0.2.0不能用…就演示下了.