<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用Nginx Ingress Controller作為 Istio 網(wǎng)格入口

          共 3180字,需瀏覽 7分鐘

           ·

          2024-04-11 14:40

          417b78a247d3b90f42d125dac570c287.webp

          1、概述

          API 網(wǎng)關(guān)作為客戶端訪問后端的入口,已經(jīng)存在很長時(shí)間了,它主要是用來管理”南北向“的流量;近幾年服務(wù)網(wǎng)格開始流行,它主要是管理系統(tǒng)內(nèi)部,即“東西向”流量,而像 Istio 這樣的服務(wù)網(wǎng)格還內(nèi)置了網(wǎng)關(guān),從而將系統(tǒng)內(nèi)外部的流量納入了統(tǒng)一管控。這經(jīng)常給初次接觸 Istio 的人帶來困惑——服務(wù)網(wǎng)格與 API 網(wǎng)關(guān)之間是什么關(guān)系?是不是使用了 Istio 就可以替代了 API 網(wǎng)關(guān)?Istio 的 API 網(wǎng)關(guān)是如何運(yùn)作的?有哪些方式暴露 Istio mesh 中的服務(wù)?這篇文章給為你解答。

          2、主要觀點(diǎn)

          • 服務(wù)網(wǎng)格誕生的初衷是為了解決分布式應(yīng)用的內(nèi)部流量的管理問題,而在此之前 API 網(wǎng)關(guān)已存在很久了。

          • 雖然 Istio 中內(nèi)置了Gateway,但是你仍可以使用自定義的 Ingress Controller 來代理外部流量。

          • API 網(wǎng)關(guān)和服務(wù)網(wǎng)格正朝著融合的方向發(fā)展。

          3、如何暴露 Istio mesh 中的服務(wù)?

          下圖展示了使用 Istio Gateway、Kubernetes Ingress、API Gateway 及 NodePort/LB 暴露 Istio mesh 中服務(wù)的四種方式。

          0fc68e2b175dfadbd7782cdaf5c955ee.webp

          其中陰影表示的是 Istio mesh,mesh 中的的流量屬于集群內(nèi)部(東西向)流量,而客戶端訪問 Kubernetes 集群內(nèi)服務(wù)的流量屬于外部(南北向)流量。不過因?yàn)?Ingress Controller、Istio Gateway 也是部署在 Kubernetes 集群內(nèi)的,這些節(jié)點(diǎn)訪問集群內(nèi)其他服務(wù)的流量可以認(rèn)為是內(nèi)部間的訪問(東西向)。

          方式 控制器 功能
          NodePort/LoadBalancer Kubernetes 負(fù)載均衡
          Kubernetes Ingress Ingress Controller 負(fù)載均衡、TLS、虛擬主機(jī)、流量路由
          Istio Gateway Istio 負(fù)載均衡、TLS、虛擬主機(jī)、高級流量路由、其他 Istio 的高級功能
          API 網(wǎng)關(guān) API Gateway 負(fù)載均衡、TLS、虛擬主機(jī)、流量路由、API 生命周期管理、權(quán)限認(rèn)證、數(shù)據(jù)聚合、賬單和速率限制

          以上4種方式方式都可以作為客戶端訪問Kubernetes集群內(nèi)部服務(wù)的入口,其中Istio Gateway、Kubernetes Ingress、API網(wǎng)關(guān)都是以Pod形式部署在Kubernetes集群內(nèi)部的,這三種方式訪問集群內(nèi)其他服務(wù)的流量都是內(nèi)部間的訪問。Istio Gateway與Kubernetes Ingress相比,Istio Gateway提供了更廣泛的自定義和靈活性,并允許將 Istio 功能(例如監(jiān)控和路由規(guī)則)應(yīng)用于進(jìn)入集群的流量,Istio官方文檔建議使用Istio Gateway而不是 Ingress 來利用 Istio 提供的完整功能集;API網(wǎng)關(guān)一般都是以微服務(wù)的形式部署在Kubernetes集群內(nèi)部作為客戶端訪問的入口,這個(gè)沒什么好講的一般都是使用開源的方案作為API網(wǎng)關(guān)例如Zuul;NodePort/LoadBalancer 是 Kubernetes 內(nèi)置的基本的暴露服務(wù)的方式,一般測試使用。

          由于目前我們生產(chǎn)環(huán)境一直都是使用Nginx Ingress Controller作為客戶端訪問Kubernetes集群內(nèi)部服務(wù)的入口方式,并且沒有使用到Istio Gateway的特有功能(API 生命周期管理、權(quán)限認(rèn)證、數(shù)據(jù)聚合、賬單和速率限制),所以本文只會介紹如何使用Nginx Ingress Controller暴露 Istio mesh 中的服務(wù)。

          4、使用Kubernetes Ingress暴露服務(wù)

          我們都知道 Kubernetes 集群的客戶端是無法直接訪問 Pod 的 IP 地址的,因?yàn)?Pod 是處于 Kubernetes 內(nèi)置的一個(gè)網(wǎng)絡(luò)平面中。我們可以將 Kubernetes 內(nèi)的服務(wù)使用 NodePort 或者 LoadBlancer 的方式暴露到集群以外。同時(shí)為了支持虛擬主機(jī)、隱藏和節(jié)省 IP 地址,可以使用 Ingress 來暴露 Kubernetes 中的服務(wù)。Kubernetes Ingress 原理如下圖所示。

           d61bd9977a8c76ab5fcbf4751f778393.webp

          簡單的說,Ingress 就是從 Kubernetes 集群外訪問集群的入口,將用戶的 URL 請求轉(zhuǎn)發(fā)到不同的服務(wù)上。Ingress 相當(dāng)于 Nginx、Apache 等負(fù)載均衡方向代理服務(wù)器,其中還包括規(guī)則定義,即 URL 的路由信息,路由信息得的刷新由 Ingress controller來提供。

          4.1  使用 Nginx Ingress Controller 作為 Istio 網(wǎng)格入口

          1、首先需要給Nginx Ingress Controller所在的Pod進(jìn)行Sidecar注入,這樣Nginx Ingress Controller就可以和Kubernetes集群內(nèi)其他注入Sidecar的服務(wù)進(jìn)行流量治理。(SideCar注入本文不再講解,詳解見Istio1.12.1 Sidecar注入配置 )

          2、在 ingress 資源上添加如下注解,替換服務(wù)名和命名空間

          1

          2

          nginx.ingress.kubernetes.io/service-upstream: 'true'

          nginx.ingress.kubernetes.io/upstream-vhost: <服務(wù)名>.<命名空間>.svc.cluster.local

          下面解釋寫這兩個(gè)注解的含義: 


          注解 類型/選項(xiàng) 功能描述
          nginx.ingress.kubernetes.io/service-upstream true 或 false 默認(rèn) Nginx 以 Service 中 Pod 的 IP 和端口為 Upstream 中的成員列表,該參數(shù)為 true 時(shí),將以 Service 的 ClusterIP 和端口為被代理入口,該功能避免了因 Pod 漂移帶來的 Upstream 的配置變化。

          nginx.ingress.kubernetes.io/upstream-vhost

          string 自定義發(fā)送到上游服務(wù)器的信息頭字段中 Host 的內(nèi)容,相當(dāng)于 Nginx 配置指令 proxy_set_header Host $host 的設(shè)置,

          Host 包含客戶端訪問的真實(shí)的域名和端口號。假設(shè)參數(shù)值為my-service.default.svc.cluster.local,相當(dāng)于用此值覆蓋了客戶端真實(shí)訪問的的域名。

          鏈接:https://www.cnblogs.com/zhangmingcheng/p/15721559.html

          (版權(quán)歸原作者所有,侵刪)


          瀏覽 40
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲国产AV网站 | 久久迷情| 黄色精品视频在线观看 | 中文字幕操逼视频 | 国产色情视频 |