Gateway-API使用

1.前言

  • 主要原因是 Ingress 资源对象不能很好的满足网络需求,很多场景下 Ingress 控制器都需要通过定义 annotations 或者 crd 来进行功能扩展,这对于使用标准和支持是非常不利的,新推出的 Gateway API 旨在通过可扩展的面向角色的接口来增强服务网络。

  • Ingress提供了某些字段配置,通过annotations进行配置也很有挑战性。Ingress API是管理传入流量的单个对象,但由于它是整个集群共享的单一资源,因此集群开发人员可以访问或修改,而集群/基础设施团队对此却一无所知。

  • Gateway API比Ingress API更好的分离了关注点。使用Ingress,集群运维人员和应用开发人员在同一个Ingress对象上操作,却不知道彼此的角色,可能会导致设置错误。

  • Route和Gateway对象是由Gateway API独立于配置创建的,从而为集群运维人员和应用开发人员提供了自主权。

  • Gateway API核心组件

    • GatewayClass: Gateway由controller实现,需要指定控制器名称。平台提供者。
    • Gateway: Gateway 定义了一个网络端点,该端点可用于接收流量。平台管理员创建。
    • Route: 将数据包路由到哪个service上。开发创建。
  • 关系:client—>gateway—>httproute—>service—>pod

  • https://gateway-api.sigs.k8s.io/guides/

2.部署controller

  • 控制器如: Istio,Contour,Gloo,Traefik 等

2.1.安装gateway api crd


$ wget https://github.com/kubernetes-sigs/gateway-api/releases/download/v0.6.1/standard-install.yaml
$ kubectl apply -f standard-install.yaml

2.2.查看安装的 CRD 资源

$ kubectl get crd |grep networking.k8s.io

#Gateway Api Controller 不需要手动去安装,所有实现了 Gateway Api 接口的网关都会集成 Controller。目前的网关流行的有 istio、apisix、nginx等
$ wget https://github.com/istio/istio/releases/download/1.20.3/istio-1.20.3-linux-amd64.tar.gz
$ tar -zxvf istio-1.20.3-linux-amd64.tar.gz
$ istioctl version

2.3.最小化安装 istio,不再需要istio-ingressgateway

$ istioctl install --set profile=minimal -y

3.创建gateway

  • 指明使用的gatewayclass,域名,协议,端口,接收那些namespace。
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: gateway
  namespace: istio-ingress
spec:
  gatewayClassName: istio
  listeners:
  - name: default
    hostname: "*.leepongmin.com"
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: All

4.发布第一个应用

4.1.创建应用

$ kubectl create deployment test-01 --image leepongmin/kubernetes:myapp.v1 --replicas 3
$ kubectl create service clusterip test-01 --tcp=80:80
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: http
  namespace: default
spec:
  parentRefs:
  - name: gateway
    namespace: istio-ingress
  hostnames:
  - "www.leepongmin.com"
  rules:
  - matches:
    backendRefs:
    - name: test-01
      port: 80
#backendrefs是指明service的信息

4.2.发布第二个应用

apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: http
  namespace: default
spec:
  parentRefs:
  - name: gateway
    namespace: istio-ingress
  hostnames:
  - "abc.leepongmin.com"
  rules:
  - matches:
    backendRefs:
    - name: test-02
      port: 8090

$ kubectl create deployment test-02 --image leepongmin/kubernetes:myapp.v2 --replicas 2
$ kubectl create service clusterip test-02 --tcp=8090:80

感兴趣的可以关注下我的公众号,不定期的会发布云原生相关实验

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值