Gateway-API
【摘要】 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
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)