Gateway-API

举报
leepongmin 发表于 2024/05/17 09:21:15 2024/05/17
【摘要】 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 等
# 安装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

# 查看安装的 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

# 最小化安装 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.发布第一个应用

# 创建应用
$ 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.5.4.发布第二个应用

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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。