奇发28网

首页 > 自动化运维 > 大规模网络运维 > Kubernetes Gateway API 攻略:解锁集群流量服务新维度!

Kubernetes Gateway API 攻略:解锁集群流量服务新维度!

原创 大规模网络运维 作者:Seal数澈 时间:2023-11-20 10:13:47 0 删除 编辑

来源:企业家在线 网址:http://www.cibkglfj.cn/a/fushun.huangye88.com/

播报:

            ④携带方便,只需将接收器与发射器一并带走即可,无需携带线材。标签:计算公式直接报价:远期汇率=即期汇率-贴水数(+升水数)间接报价:远期汇率=即期汇率+贴水数(-升水数)在直接报价法中,贴水表示着本国货币升值;相反的,在间接报价法中,贴水表示本国货币贬值。

            13、6、达到加热时间后,立即把管材管件从加热模具上同时取下,迅速无旋转地直线均匀插入到已热熔的深度,使接头处形成均匀凸缘,并要控制插进去后的反弹。5、(2)“法德矛盾,从实际情况考察,“英德矛盾主要说”并不全面。

            在其中,大部分债务是从银行借来的。时间:2022-11-1816:14:08(相关资料图)最近这段时间总有小伙伴问小编股票配债是什么意思?股票配债的具体含义是什么,小编为此在网上搜寻了一些有关于股票配债是什么意思?股票配债的具体含义的知识送给大家,希望能解答各位小伙伴的疑惑。

            北通阿修罗3S多模版游戏手柄的握把上有激光晒纹,手感更细腻,还能防滑,这还只是表面。这些分析有助于管理者评估仓库瓶颈的位置,以及如何解决它们。

          重点推荐:“金融+科技”助力“碳中和”,平安银行荣膺“碳中和先锋奖” 移动机器人助力企业降本增效一般而言,检验一间仓库的运营能力主要有两个维度,即存储密度和出货效率,而移动机器能显著提升这两个方面。在海上风电发展利好背景下,亨通光电公司及控股子公司江苏亨通高压海缆有限公司昨日斩获海上风电等大订单,合计中标总金额为亿元。

          “金融+科技”助力“碳中和”,平安银行荣膺“碳中和先锋奖”

          Kubernetes Gateway API 刚刚 GA,旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源,用于管理已暴露的服务。在这篇文章中,我将介绍 Gateway API 资源,并以 Istio 为例来展示这些资源是如何关联的。通过这个示例,你将了解 Gateway API 的各个组成部分如何配合以将流量传递到后端服务。
           

          背 景

          允许外部与 Kubernetes 集群内的服务通信是 administrator 需要执行的最基本任务之一。Service 在 IP 层面上提供的功能十分有限,且缺乏根据应用层数据(如 DNS 主机名或 HTTP 路径)路由流量的能力。因此 Kubernetes 提供了 Ingress API 来实现应用层路由。
           

          然而,Ingress API 有一些限制。Ingress2gateway 的公告[1]清楚地列出了这些限制:

          • Ingress 侧重于 HTTP 流量,因此用户需要找到其他解决方案来处理 UDP、TCP 或其他协议。

          • Ingress 资源混合了基础架构和应用程序配置,让细粒度的基于角色的访问控制(RBAC)的实施变得较为困难。
             

          第二点对于已经熟悉 Ingress 的用户来说是最明显的。在平台工程中提供强大的 RBAC 是集群管理的关键步骤。将基础设施组件(负载均衡器、配置等)的权限与流量路由规则的权限分开,能够让权限的边界更加清晰。
           

          接下来我将介绍 Gateway API 如何划分这些资源,以及它们如何最终结合在一起来路由流量。
           

          设置测试环境

          本文使用运行 Istio 和一个示例工作负载的测试环境来检查和理解各种 Gateway API 资源。如果你也想上手尝试,可以复制这个环境。
           

          我用的是 K3s,使用 Kubernetes 集群也是类似的操作。如果选择使用 K3s,则在安装时不要启用 Traefik:

          $ curl -sfL | INSTALL_K3S_EXEC="server --disable=traefik" sh -

           

          首先,部署 Gateway API CRD(Custom Resource Definitions),并按照官方文档安装 Istio(

          # Install the CRDs$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
            { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.8.0" | kubectl apply -f -; }
          customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io created
          customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io created
          customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io created
          customresourcedefinition.apiextensions.k8s.io/referencegrants.gateway.networking.k8s.io created# Install Istio$ istioctl install --set profile=minimal -y
          ? Istio core installed
          ? Istiod installed
          ? Installation complete
          Made this installation the default for injection and validation.

           

          接下来创建一个简单的工作负载,比如一个 Nginx  deployment ,并通过  deservice 将其暴露:

          # Deployment.yaml---apiVersion: apps/v1kind: Deploymentmetadata:
            labels:
              app: nginx
            name: nginxspec:
            replicas: 3
            selector:
              matchLabels:
                app: nginx
            template:
              metadata:
                creationTimestamp: null
                labels:
                  app: nginx
              spec:
                containers:
                - image: nginx:latest
                  name: nginx# Service.yaml---apiVersion: v1kind: Servicemetadata:
            labels:
              app: nginx
            name: nginx
            namespace: defaultspec:
            ports:
            - port: 80
              protocol: TCP
              targetPort: 80
            selector:
              app: nginx
            type: ClusterIP
          $ kubectl apply -f Deployment.yaml
          deployment.apps/nginx created$ kubectl apply -f Service.yaml
          service/nginx created

           

          以上就是你用来理解 Gateway API 所需的全部基础设施。
           

          了解 Gateway API 资源

          想要使用 Gateway API,有三种资源类型你需要明确了解:

          • GatewayClass

          • Gateway

          • 路由资源,比如  HTTPRouteGRPCRoute。GA 版本仅包含在 v1 通道中到  HTTPRoute
             

          这些资源在标准 Ingress API 或自定义提供商负载均衡器和路由工具提供的 CRD 中以各种方式组合在一起。通过将这些资源拆分为单独的组件,Gateway API 实现了关注点分离和强大的、细粒度的访问控制。
           

          让我们逐个了解这些资源,以了解它们之间的关系。
           

          了解 GatewayClass 资源

          GatewayClass资源的作用与现有 Ingress API 中的  IngressClass相同,类似于 Storage API 中的  StorageClass。它定义了可以创建的  Gateway类别。通常,此资源由你的基础架构平台(如 EKS 或 GKE)提供。也可以由第三方的 Ingress Controller 提供,例如 Istio 或 Nginx。Istio 包含两个  GatewayClasses

          $ kubectl get gatewayclass
          NAME           CONTROLLER                    ACCEPTED   AGE
          istio-remote   istio.io/unmanaged-gateway    True       19h
          istio          istio.io/gateway-controller   True       19h

           

          spec字段提供了有关实现  GatewayClass功能的 controller 的信息,它定义了整个集群使用的控制器,而  GatewayClasses 是集群范围的资源,适用于所有命名空间。
           

          $ kubectl get gatewayclass istio -o yamlapiVersion: gateway.networking.k8s.io/v1beta1kind: GatewayClassmetadata:
            creationTimestamp: "2023-10-30T02:15:11Z"
            generation: 1
            name: istio
            resourceVersion: "636"
            uid: dea0bb44-5f1b-4d23-8f7f-c34f70b4603cspec:
            controllerName: istio.io/gateway-controller
            description: The default Istio GatewayClassstatus:
            conditions:
            - lastTransitionTime: "2023-10-30T02:15:11Z"
              message: Handled by Istio controller
              observedGeneration: 1
              reason: Accepted
              status: "True"
              type: Accepted

           

          GatewayClass还可以指定传递给控制器的参数。这样上游项目能够进一步定制向集群管理员公开的配置。也就是说,  GatewayClass允许集群管理员专注于将其流量暴露给外部,而不必担心例如在底层基础设施上如何创建负载均衡器等实现细节。
           

          创建 Gateway

          Gateway 代表在基础设施提供商中实例化的负载均衡器服务。它可以是一个实际的云负载均衡器,用于处理流量。也可以代表现有负载均衡器中的虚拟配置。然后通过  GatewayClass 进行抽象。Cluster operator 专注于定义必要的  Gateway 资源,无需担心由  GatewayClass 处理的实现细节。
           

          Gateway 在其规范中引用了一个  GatewayClass。下面的示例使用 istio 类,并定义了一个响应端口 8080 上  *.example.com 的 HTTP 请求的单个侦听器:

          # Gateway.yaml---apiVersion: gateway.networking.k8s.io/v1beta1kind: Gatewaymetadata:
            name: tutorial-gw
            namespace: defaultspec:
            gatewayClassName: istio
            listeners:
            - name: default
              hostname: "*.example.com"
              port: 8080
              protocol: HTTP
              allowedRoutes:
                namespaces:
                  from: All

           

          使用 Istio 在创建  Gateway 时还会相应配置 Deployment和  Service 来处理流量。 GatewayClass 的控制器负责为  Gateway 处理所需的基础设施或配置的设置:

          $ kubectl get pods
          NAME                                READY   STATUS    RESTARTS        AGE
          tutorial-gw-istio-65bfccf7c-45c4w   1/1     Running   2 (6m31s ago)   18h$ kubectl get service
          NAME                TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                          AGE
          tutorial-gw-istio   LoadBalancer   10.43.126.90   192.168.122.10   15021:31348/TCP,8080:31728/TCP   18h

           

          这里需要注意的是  Gateway 中没有定义路由规则。 Gateways 代表基础设施的配置,这种分离对于实现 RBAC 至关重要。访问控制模型允许 cluster operator 配置可用的 Gateways ,让用户在其路由资源中引用,而无需暴露对基础设施配置本身的访问。
           

          创建路由

          现有的 Ingress API 仅支持 HTTP 和 HTTPS 服务,这是一个比较大的限制。
           

          而新的 Gateway API 为各种入站流量类型提供通用支持。  HTTPRouteTCPRoute 、  TLSRoute 、  GRPCRoute 等资源在特定  Gateway 上指定了实际的流量路由。Gateway API 的 GA 版本只在标准的 v1 通道中包含了  HTTPRoute资源,在未来的版本中将会有更多的协议支持。
           

          HTTPRoute资源指定与用于暴露服务的 Gateway 的连接,以及一系列规则来将流量路由到适当的后端。下面的示例将  HTTPRoute附加到  tutorial-gw Gateway,并指定规则将所有流量路由到  nginx Service:

          ---apiVersion: gateway.networking.k8s.io/v1beta1kind: HTTPRoutemetadata:
            name: tutorial-route
            namespace: defaultspec:
            parentRefs:
            - group: gateway.networking.k8s.io
              kind: Gateway
              name: tutorial-gw
            rules:
            - backendRefs:
              - group: ""
                kind: Service
                name: nginx
                port: 80
                weight: 1
              matches:
              - path:
                  type: PathPrefix
                  value: /
          $ kubectl apply -f HTTPRoute.yaml
          httproute.gateway.networking.k8s.io/tutorial-route created$ kubectl get httproute
          NAME             HOSTNAMES   AGE
          tutorial-route               6s

           

          综合以上

          Gateway API 将许多传统上包含在单个资源定义中的资源拆分开来。要跟踪所有这些资源之间的连接可能有点困难,这里我将资源之间的关系图展示如下:

          Gateway API 资源之间的关系
           

          快速回顾

          • GatewayClass 定义了可以部署的 Gateway 类型。通常由基础设施提供商提供。在本示例中,Istio 定义了 GatewayClass 。

          • Gateway 是负载均衡基础设施的实例化。这可以是在云环境中部署的实际负载均衡器,也可以是针对现有负载均衡器执行的一些配置。无论哪种方式,通过简单地引用所需的 GatewayClass ,就能从 cluster administrator 中抽象出来。

          • HTTPRoute(或任何其他支持的 Route 资源)定义了处理流量的实际规则。这些路由附加到特定的 Gateway,最终决定了流量的转发。

           

          有了所有这些配置,就可以对服务进行测试请求。本示例 Gateway 配置为侦听端口 8080 上  *.example.com 的 HTTP 请求,因此你的请求需要设置适当的 Host header 和端口:

          $ curl -H "Host: www.example.com" 192.168.122.10:8080<!DOCTYPE html><html><head><title>Welcome to nginx!</title>

           

          这样,你就使用新的网关 API 成功配置了第一组资源咯!
           

          链接:

           


          来自 “ ITPUB博客 ” ,链接:http://www.cibkglfj.cn/70026925/viewspace-2996095/,如需转载,请注明出处,否则将追究法律责任。

          请登录后发表评论 登录
          全部评论

          注册时间:2023-02-20

          • 博文量
            93
          • 访问量
            52149
          分享:

          收藏

          --

          --

          无障碍浏览