traefik gateway api

背景

在使用istio后开始考虑网关了,istio已经有自己的网关,为什么还要另外找一个别的网关,参考了好几个文章大致结论是,istio的网关功能不够强大,下图红色的部分是istio网关暂时缺失的,所以我的结论是在istio外面再加一层网关,虽然现在已经有组织在将api gateway和服务网格融合希望降低学习成本,但是我觉得分开也没什么不好的各司其职,毕竟来说先有的网关才有的服务网格,哪一天服务网格没了网关还在。所以我选择了traefik,现在traefik的原因是因为traefik是用go写的,envoy是c,我用go语言更方便一些,再加上github的星星较多,就它了。
在这里插入图片描述

Gateway api

Gateway api是ingress的升级版
在这里插入图片描述

  1. 厂商实现了Gateway API 并定义了自己 GatewayClass 类型,一系列的实现可供选择。就好比编程语言里的类的概念,厂商写好网关类。
  2. 集群管理员安装 Gateway API 的实现,部署跨命名空间的共享网关实例,或者命名空间独享的网关实例。如下图,集群管理员部署了跨 store 和 site 命名空间的网关 foo。类似于实例化类的概念,集群管理员根据需要new出来自己想要的网关。
  3. 开发人员创建 HTTPRoute 资源将流量路由到指定的后端服务。类似于调用类里的方法,集群管理员创建好网关后,开发人员去操作该网关。
    在这里插入图片描述

安装gateway api

看一下这个文章就好了
https://traefik.io/blog/getting-started-with-traefik-and-the-new-kubernetes-gateway-api/
说几点其中注意的

安装 CRD
Kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.4.0"

如果因为网络限制,可以先把github.com/kubernetes-sigs/gateway-api 这个项目clone下来,然后到/config文件夹执行

Kubectl apply -k ./crd
Helm安装traefik

修改value.yaml

  1. 支持gateway
    在这里插入图片描述
  2. Expose 9000端口,为了dashboard
    在这里插入图片描述
  3. service类型改为nodeport
    在这里插入图片描述

安装

helm install -f values.yaml traefik . -n traefik

更新

helm upgrade -f values.yaml traefik . -n traefik

删除

helm uninstall traefik -n traefik
安装成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果没有看到gateway class或者gatway肯定是不成功的,最好describe看一下gateway的状态,正确应该是listener。

访问dashboard

主机ip:暴露的9000端口/dashboard/如上就是ip:32452/dashboard/就能看到,说明你已经成功了。
在这里插入图片描述
我曾经在这一步上折腾了好久,网上有些文章是说给dashboard配置一个ingress或者http route,但是我按照他们写的都没有成功,可能是我的问题,所以我就用了一个最简单的方法直接暴露9000端口,这个方式官方不推荐,但是我们先跑起来,日后再说。

部署一个httpRoute

whami.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
  namespace: traefik
spec:
  replicas: 2
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: traefik/whoami:v1.6.0
          ports:
            - containerPort: 80
              name: http

---
apiVersion: v1
kind: Service
metadata:
  name: whoami
  namespace: traefik
spec:
  selector:
    app: whoami

  ports:
    - port: 80
      targetPort: http

whami-httpRoute.yaml

apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
  name: http-app-1
  namespace: traefik

spec:
  parentRefs:
    - name: traefik-gateway

  hostnames:
    - test.whoami.cn

  rules:
    - matches:
        - path:
            type: Exact
            value: /

      backendRefs:
        - name: whoami
          port: 80
          weight: 1

配置一下hosts然后访问
http://test.whoami.cn:暴露的80端口号/ 我这里就是 http://test.whoami.cn:32560/
在这里插入图片描述
也可以去dashboard http里面看看是否配置成功
在这里插入图片描述
这样一个最简单的httpRoute就成功了

总结

我在安装时候遇到了很多的坑,所以如果你失败了一定要按照我如上的步骤,多看看,多想想。

参考

https://cloudnative.to/blog/do-i-need-an-api-gateway-if-i-have-a-service-mesh/
https://traefik.io/blog/getting-started-with-traefik-and-the-new-kubernetes-gateway-api/
https://medium.com/solo-io/getting-started-with-a-service-mesh-starts-with-a-gateway-96384deedca2
https://jimmysong.io/blog/why-gateway-api-is-the-future-of-ingress-and-mesh/
https://mp.weixin.qq.com/s/UZmcAx_Uj4Ozpa7QFVKLwQ
https://atbug.com/why-smi-collaborating-in-gateway-api-gamma/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值