在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes Gateway API攻略教程

馬哥Linux運(yùn)維 ? 來(lái)源:51cto ? 2024-01-12 11:32 ? 次閱讀

Kubernetes Gateway API 剛剛 GA,旨在改進(jìn)將集群服務(wù)暴露給外部的過(guò)程。這其中包括一套更標(biāo)準(zhǔn)、更強(qiáng)大的 API資源,用于管理已暴露的服務(wù)。在這篇文章中,我將介紹 Gateway API 資源,并以 Istio 為例來(lái)展示這些資源是如何關(guān)聯(lián)的。通過(guò)這個(gè)示例,你將了解 Gateway API 的各個(gè)組成部分如何配合以將流量傳遞到后端服務(wù)。

背 景

允許外部與 Kubernetes 集群內(nèi)的服務(wù)通信administrator 需要執(zhí)行的最基本任務(wù)之一。Service 在 IP 層面上提供的功能十分有限,且缺乏根據(jù)應(yīng)用層數(shù)據(jù)(如 DNS 主機(jī)名或 HTTP 路徑)路由流量的能力。因此 Kubernetes 提供了 Ingress API 來(lái)實(shí)現(xiàn)應(yīng)用層路由。

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

Ingress 側(cè)重于 HTTP 流量,因此用戶需要找到其他解決方案來(lái)處理 UDP、TCP 或其他協(xié)議。

Ingress 資源混合了基礎(chǔ)架構(gòu)和應(yīng)用程序配置,讓細(xì)粒度的基于角色的訪問(wèn)控制(RBAC)的實(shí)施變得較為困難。

第二點(diǎn)對(duì)于已經(jīng)熟悉 Ingress 的用戶來(lái)說(shuō)是最明顯的。在平臺(tái)工程中提供強(qiáng)大的 RBAC 是集群管理的關(guān)鍵步驟。將基礎(chǔ)設(shè)施組件(負(fù)載均衡器、配置等)的權(quán)限與流量路由規(guī)則的權(quán)限分開(kāi),能夠讓權(quán)限的邊界更加清晰。

接下來(lái)我將介紹 Gateway API 如何劃分這些資源,以及它們?nèi)绾巫罱K結(jié)合在一起來(lái)路由流量。

設(shè)置測(cè)試環(huán)境

本文使用運(yùn)行 Istio 和一個(gè)示例工作負(fù)載的測(cè)試環(huán)境來(lái)檢查和理解各種 Gateway API 資源。如果你也想上手嘗試,可以復(fù)制這個(gè)環(huán)境。

我用的是 K3s,使用 Kubernetes 集群也是類似的操作。如果選擇使用 K3s,則在安裝時(shí)不要啟用 Traefik:

$ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --disable=traefik" sh -

首先,部署 Gateway API CRD(Custom Resource Definitions),并按照官方文檔安裝 Istio( https://istio.io/latest/docs/tasks/traffic-management/ingress/gateway-api/):

# 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.

接下來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的工作負(fù)載,比如一個(gè) Nginxdeployment,并通過(guò)deservice將其暴露:

# Deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
# Service.yaml
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  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

以上就是你用來(lái)理解 Gateway API 所需的全部基礎(chǔ)設(shè)施。

了解 Gateway API 資源

想要使用 Gateway API,有三種資源類型你需要明確了解:

GatewayClass

Gateway

路由資源,比如HTTPRoute或GRPCRoute。GA 版本僅包含在 v1 通道中到HTTPRoute。

這些資源在標(biāo)準(zhǔn) Ingress API 或自定義提供商負(fù)載均衡器和路由工具提供的 CRD 中以各種方式組合在一起。通過(guò)將這些資源拆分為單獨(dú)的組件,Gateway API 實(shí)現(xiàn)了關(guān)注點(diǎn)分離和強(qiáng)大的、細(xì)粒度的訪問(wèn)控制。

讓我們逐個(gè)了解這些資源,以了解它們之間的關(guān)系。

了解 GatewayClass 資源

GatewayClass資源的作用與現(xiàn)有 Ingress API 中的IngressClass相同,類似于 Storage API 中的StorageClass。它定義了可以創(chuàng)建的Gateway類別。通常,此資源由你的基礎(chǔ)架構(gòu)平臺(tái)(如 EKS 或 GKE)提供。也可以由第三方的 Ingress Controller 提供,例如 Istio 或 Nginx。Istio 包含兩個(gè)GatewayClasses:

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

spec字段提供了有關(guān)實(shí)現(xiàn)GatewayClass功能的 controller 的信息,它定義了整個(gè)集群使用的控制器,而GatewayClasses是集群范圍的資源,適用于所有命名空間。

$ kubectl get gatewayclass istio -o yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
  creationTimestamp: "2023-10-30T0211Z"
  generation: 1
  name: istio
  resourceVersion: "636"
  uid: dea0bb44-5f1b-4d23-8f7f-c34f70b4603c
spec:
  controllerName: istio.io/gateway-controller
  description: The default Istio GatewayClass
status:
  conditions:
  - lastTransitionTime: "2023-10-30T0211Z"
    message: Handled by Istio controller
    observedGeneration: 1
    reason: Accepted
    status: "True"
    type: Accepted

GatewayClass還可以指定傳遞給控制器的參數(shù)。這樣上游項(xiàng)目能夠進(jìn)一步定制向集群管理員公開(kāi)的配置。也就是說(shuō),GatewayClass允許集群管理員專注于將其流量暴露給外部,而不必?fù)?dān)心例如在底層基礎(chǔ)設(shè)施上如何創(chuàng)建負(fù)載均衡器等實(shí)現(xiàn)細(xì)節(jié)。

創(chuàng)建 Gateway

Gateway代表在基礎(chǔ)設(shè)施提供商中實(shí)例化的負(fù)載均衡器服務(wù)。它可以是一個(gè)實(shí)際的云負(fù)載均衡器,用于處理流量。也可以代表現(xiàn)有負(fù)載均衡器中的虛擬配置。然后通過(guò)GatewayClass進(jìn)行抽象。Cluster operator 專注于定義必要的Gateway資源,無(wú)需擔(dān)心由GatewayClass處理的實(shí)現(xiàn)細(xì)節(jié)。

Gateway在其規(guī)范中引用了一個(gè)GatewayClass。下面的示例使用 istio 類,并定義了一個(gè)響應(yīng)端口 8080 上*.example.com的 HTTP 請(qǐng)求的單個(gè)偵聽(tīng)器:

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

使用 Istio 在創(chuàng)建Gateway時(shí)還會(huì)相應(yīng)配置Deployment和Service來(lái)處理流量。GatewayClass的控制器負(fù)責(zé)為Gateway處理所需的基礎(chǔ)設(shè)施或配置的設(shè)置:

$ 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中沒(méi)有定義路由規(guī)則。Gateways代表基礎(chǔ)設(shè)施的配置,這種分離對(duì)于實(shí)現(xiàn) RBAC 至關(guān)重要。訪問(wèn)控制模型允許 cluster operator 配置可用的Gateways,讓用戶在其路由資源中引用,而無(wú)需暴露對(duì)基礎(chǔ)設(shè)施配置本身的訪問(wèn)。

創(chuàng)建路由

現(xiàn)有的 Ingress API 僅支持 HTTP 和 HTTPS 服務(wù),這是一個(gè)比較大的限制。

而新的 Gateway API 為各種入站流量類型提供通用支持。HTTPRoute、TCPRoute、TLSRoute、GRPCRoute等資源在特定Gateway上指定了實(shí)際的流量路由。Gateway API 的 GA 版本只在標(biāo)準(zhǔn)的 v1 通道中包含了HTTPRoute資源,在未來(lái)的版本中將會(huì)有更多的協(xié)議支持。

HTTPRoute資源指定與用于暴露服務(wù)的 Gateway 的連接,以及一系列規(guī)則來(lái)將流量路由到適當(dāng)?shù)暮蠖恕O旅娴氖纠龑TTPRoute附加到tutorial-gwGateway,并指定規(guī)則將所有流量路由到nginxService:

---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: tutorial-route
  namespace: default
spec:
  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 將許多傳統(tǒng)上包含在單個(gè)資源定義中的資源拆分開(kāi)來(lái)。要跟蹤所有這些資源之間的連接可能有點(diǎn)困難,這里我將資源之間的關(guān)系圖展示如下:

7e929818-b05c-11ee-8b88-92fbcf53809c.jpg

Gateway API 資源之間的關(guān)系

快速回顧

GatewayClass定義了可以部署的 Gateway 類型。通常由基礎(chǔ)設(shè)施提供商提供。在本示例中,Istio 定義了GatewayClass。

Gateway是負(fù)載均衡基礎(chǔ)設(shè)施的實(shí)例化。這可以是在云環(huán)境中部署的實(shí)際負(fù)載均衡器,也可以是針對(duì)現(xiàn)有負(fù)載均衡器執(zhí)行的一些配置。無(wú)論哪種方式,通過(guò)簡(jiǎn)單地引用所需的GatewayClass,就能從 cluster administrator 中抽象出來(lái)。

HTTPRoute(或任何其他支持的 Route 資源)定義了處理流量的實(shí)際規(guī)則。這些路由附加到特定的 Gateway,最終決定了流量的轉(zhuǎn)發(fā)。

有了所有這些配置,就可以對(duì)服務(wù)進(jìn)行測(cè)試請(qǐng)求。本示例Gateway配置為偵聽(tīng)端口 8080 上*.example.com的 HTTP 請(qǐng)求,因此你的請(qǐng)求需要設(shè)置適當(dāng)?shù)?Host header 和端口:

$ curl -H "Host: www.example.com" 192.168.122.10:8080



Welcome to nginx!

這樣,你就使用新的網(wǎng)關(guān) API 成功配置了第一組資源咯!

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6076

    瀏覽量

    136476
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    4605

    瀏覽量

    51551
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1518

    瀏覽量

    62448
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    227

    瀏覽量

    8757

原文標(biāo)題:Kubernetes Gateway API 攻略:解鎖集群流量服務(wù)新維度!

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Kubernetes的Device Plugin設(shè)計(jì)解讀

    摘要: Kubernetes的生態(tài)地位已經(jīng)確立,可擴(kuò)展性將是其發(fā)力的主戰(zhàn)場(chǎng)。異構(gòu)計(jì)算作為非常重要的新戰(zhàn)場(chǎng),Kubernetes非常重視。而異構(gòu)計(jì)算需要強(qiáng)大的計(jì)算力和高性能網(wǎng)絡(luò),需要提供一種統(tǒng)一的方式
    發(fā)表于 03-12 16:23

    MLDL之API:關(guān)于各國(guó)內(nèi)外大平臺(tái)API簡(jiǎn)介、使用方法之詳細(xì)攻略

    MLDL之API:關(guān)于各國(guó)內(nèi)外大平臺(tái)API簡(jiǎn)介、使用方法之詳細(xì)攻略
    發(fā)表于 12-19 17:00

    不吹不黑,今天我們來(lái)聊一聊 Kubernetes 落地的三種方式

    Kubernetes API 來(lái)訪問(wèn)集群。你可以完全跟著社區(qū)升級(jí)演進(jìn)你的 Kubernetes,保持與社區(qū)同步,完全借助于社區(qū)的力量維護(hù)你的 Kubernetes。這種落地方式無(wú)疑
    發(fā)表于 10-12 16:07

    Kubernetes API詳解

    的《kubernetes權(quán)威指南》一書的第三章3.2節(jié),獲得出版社和作者的獨(dú)家授權(quán)發(fā)布。本節(jié)重點(diǎn)講述了kubernetesAPI概述。 Kubernetes
    發(fā)表于 10-12 16:19 ?0次下載
    <b class='flag-5'>Kubernetes</b> <b class='flag-5'>API</b>詳解

    深入研究Kubernetes調(diào)度

    “本文從 Pod 和節(jié)點(diǎn)的配置開(kāi)始,介紹了 Kubernetes Scheduler 框架、擴(kuò)展點(diǎn)、API 以及可能發(fā)生的與資源相關(guān)的瓶頸,并展示了性能調(diào)整設(shè)置,涵蓋了 Kubernetes 中調(diào)度
    的頭像 發(fā)表于 08-23 10:39 ?1458次閱讀

    local-data-api-gateway本地?cái)?shù)據(jù)API網(wǎng)關(guān)

    ./oschina_soft/gitee-local-data-api-gateway.zip
    發(fā)表于 06-14 10:27 ?2次下載
    local-data-<b class='flag-5'>api-gateway</b>本地?cái)?shù)據(jù)<b class='flag-5'>API</b>網(wǎng)關(guān)

    帶你快速了解 kubernetes

    節(jié)點(diǎn),負(fù)責(zé)控制整個(gè) kubernetes 集群。它包括 Api Server、Scheduler、Controller 等組成部分。它們都需要和 Etcd 進(jìn)行交互以存儲(chǔ)數(shù)據(jù)。 Api Server:
    的頭像 發(fā)表于 01-17 10:00 ?1400次閱讀

    什么是Kubernetes容器運(yùn)行時(shí)CRI

    起初,Docker是事實(shí)上的容器技術(shù)標(biāo)準(zhǔn),Kubernetes v1.5之前的代碼中直接調(diào)用Docker API,實(shí)現(xiàn)容器運(yùn)行時(shí)的相關(guān)操作。
    的頭像 發(fā)表于 02-20 16:22 ?1583次閱讀
    什么是<b class='flag-5'>Kubernetes</b>容器運(yùn)行時(shí)CRI

    Kubernetes Operator最佳實(shí)踐介紹

    kubernetes operator是通過(guò)連接主API并watch時(shí)間的一組進(jìn)程,一般會(huì)watch有限的資源類型。
    的頭像 發(fā)表于 04-19 09:16 ?1034次閱讀

    API 網(wǎng)關(guān)詳細(xì)介紹(上)

    業(yè)界有很多流行的 API 網(wǎng)關(guān),開(kāi)源的有 Nginx、Netflix Zuul、Kong 等。當(dāng)然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關(guān)還有 GoKu API Gateway 和 Tyk 等
    的頭像 發(fā)表于 05-04 17:28 ?1581次閱讀
    <b class='flag-5'>API</b> 網(wǎng)關(guān)詳細(xì)介紹(上)

    API 網(wǎng)關(guān)詳細(xì)介紹(下)

    業(yè)界有很多流行的 API 網(wǎng)關(guān),開(kāi)源的有 Nginx、Netflix Zuul、Kong 等。當(dāng)然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關(guān)還有 GoKu API Gateway 和 Tyk 等
    的頭像 發(fā)表于 05-04 17:28 ?913次閱讀
    <b class='flag-5'>API</b> 網(wǎng)關(guān)詳細(xì)介紹(下)

    Kubernetes多租戶集群的概念和常見(jiàn)的應(yīng)用模式

    KaaS 多租戶方案通常與云服務(wù)提供商有關(guān)。在這種場(chǎng)景下,業(yè)務(wù)平臺(tái)的服務(wù)通過(guò) Kubernetes 控制平面直接暴露給不同租戶的用戶。最終用戶可以使用服務(wù)提供商提供的 Kubernetes API 或其他擴(kuò)展
    的頭像 發(fā)表于 05-15 16:13 ?1273次閱讀
    <b class='flag-5'>Kubernetes</b>多租戶集群的概念和常見(jiàn)的應(yīng)用模式

    Kubernetes 監(jiān)控利器功能特性

    Kubeshark 是專為 Kubernetes 設(shè)計(jì)的 API 流量分析器,它提供實(shí)時(shí)的 K8s 協(xié)議級(jí)別的可見(jiàn)性,可以捕獲和監(jiān)控所有在容器、Pod、節(jié)點(diǎn)和集群之間進(jìn)出和流動(dòng)的流量和負(fù)載。可以把它想象成專門針對(duì) Kubernetes
    的頭像 發(fā)表于 05-17 16:10 ?685次閱讀
    <b class='flag-5'>Kubernetes</b> 監(jiān)控利器功能特性

    怎么使用Kubernetes檢查點(diǎn)API快速進(jìn)行容器的備份和恢復(fù)呢?

    Kubernetes v1.25 引入了容器檢查點(diǎn) API 作為 alpha 特性。這提供了一種在不停止容器的情況下備份和恢復(fù)運(yùn)行在 Pod 中的容器的方式。此功能主要用于調(diào)試分析,但任何 Kubernetes 用戶都可以利用常
    的頭像 發(fā)表于 10-30 15:50 ?563次閱讀

    api網(wǎng)關(guān) kong 教程入門

    為什么使用API-Gateway 方便客戶端維護(hù)– 每個(gè)請(qǐng)求方不用管理多個(gè)api url,統(tǒng)一訪問(wèn)api-gateway即可 接口重構(gòu)時(shí)調(diào)用方不須了解接口本身等拆分和聚合 客戶端無(wú)須關(guān)心接口協(xié)議
    的頭像 發(fā)表于 11-10 11:39 ?872次閱讀
    <b class='flag-5'>api</b>網(wǎng)關(guān) kong 教程入門
    主站蜘蛛池模板: 亚洲一区视频 | 色视频2| 午夜精品一区二区三区在线观看 | 日本一区二区三区在线 视频观看免费 | 亚洲bbbbbxxxxx精品三十七 | 狠狠要| 日韩va亚洲va欧美va浪潮 | 性做久久久久 | 三级视频网站 | 成人影院在线观看视频 | 国产亚洲综合精品一区二区三区 | 久久国产精品视频 | 麻豆国产一区二区在线观看 | 天天躁日日躁狠狠躁中文字幕老牛 | 99精品久久99久久久久久 | 黄 色 成 年人网站 黄 色 成 年人在线 | 欧美又黄又嫩大片a级 | 99久久久精品 | 亚洲伦理中文字幕一区 | 色老成人精品视频在线观看 | 国产中出视频 | 亚洲综合色网站 | 久久男人的天堂色偷偷 | www.一区二区三区.com | 久久久久88色偷偷免费 | 美女视频黄视大全视频免费网址 | 日韩一级特黄毛片在线看 | 免费观看视频 | 欧美一级免费 | 人人爱人人艹 | 国内自拍2021 | 狠狠五月天 | 最好看免费中文字幕2018视频 | 国产全部理论片线观看 | 校园春色亚洲欧美 | 黄网站视频在线观看 | 天堂网视频 | 天天色综合5 | 亚洲天堂ww| 一级特黄特色的免费大片视频 | 免费大片黄日本在线观看 |