色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ubuntu下部署envoy并作為前端代理方法

馬哥Linux運維 ? 來源:稀土掘金技術社區 ? 2024-01-08 18:08 ? 次閱讀

前言

Envoy 是一個開源的高性能、可擴展的代理服務,最初由 Lyft 公司開發。它設計用于處理現代的微服務架構中的網絡通信,并提供了許多功能,包括負載均衡、服務發現、路由、認證、授權等。Envoy 被廣泛用于構建和部署云原生應用程序以及微服務體系結構。

本文將通過將envoy作為前端代理來演示envoy的安裝、配置和簡單使用。

本文使用環境

Ubuntu 22.04.3 LTS Desktop 64-bit

1 安裝

envoy 編譯比較復雜,可以使用Envoy 社區提供的docker鏡像和getenvoy項目,不過getenvoy所使用的版本比較老。在Linux下最簡單的方式還是直接使用官方的envoy預編譯二進制文件。

1.1 下載

從Envoy 的 GitHub 發行版頁面下載 Ubuntu 的最新版的envoy預編譯二進制文件,這里選擇“envoy-1.28.0-linux-x86_64”

https://github.com/envoyproxy/envoy/releases

4cd6d37c-ae0c-11ee-8b88-92fbcf53809c.jpg4ce16a3a-ae0c-11ee-8b88-92fbcf53809c.jpg

1.2 安裝envoy

新建項目目錄,將文件復制到該目錄下(本文使用/home/zhg/Mine/Workplace/getenvoy/)

下載完成后如果是.tar.gz則需要解壓

如果是(application/x-executable)可執行文件,則需要添加添加可執行權限


# 重命名為"envoy"方便輸入命令
sudo mv envoy-1.28.0-linux-x86_64 envoy


# 添加可執行權限
chmod +x envoy 


通過以下命令可以查看envoy版本,以驗證envoy是否正確安裝

./envoy --version

4cf1353c-ae0c-11ee-8b88-92fbcf53809c.jpg

2 配置

配置參考官網

www.envoyproxy.io/docs/envoy/…

envoy 可以通過靜態配置和動態配置兩種方式實現,靜態文件通常yaml格式的文件進行配置,主要字段有:

listeners(監聽器)

listeners 字段用于定義Envoy監聽的網絡地址和協議。它描述了Envoy如何接收和處理傳入的連接請求。


listeners:
-   name:給監聽器命名,方便引用。
-   address:指定監聽的 IP 地址和端口。
-   filters:指定用于處理傳入連接的過濾器鏈,包括協議轉碼、路由、TLS 等。

filter(過濾器)

filters字段通常用于通過配置文件引入和加載Envoy的各種過濾器。過濾器是Envoy的功能組件,用于在請求或響應的處理過程中執行特定的操作。過濾器可以添加、修改或刪除請求或響應的頭信息,執行轉換,執行日志記錄等操作。

envoy.http_connection_manager 是Envoy的HTTP連接管理器,它用于處理HTTP請求和響應。它是Envoy配置的核心組件之一,負責管理HTTP連接的生命周期、處理HTTP協議、執行各種過濾器等。該連接管理器允許您配置各種HTTP功能,包括路由、重試、負載均衡、超時等

filters:                           # 過濾器列表
  - name: envoy.http_connection_manager   # 使用 Envoy 的 HTTP 連接管理器過濾器
    typed_config:                   # 配置該過濾器的類型和參數
      "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
      codec_type: HTTP2             # 使用 HTTP/2 編解碼器
      stat_prefix: ingress_http     # 用于生成統計信息的前綴
      route_config:                  # 路由配置
        name: local_route           # 路由的名稱
        virtual_hosts:               # 虛擬主機列表

             

clusters(集群)

clusters 字段用于定義集群(clusters)。集群是Envoy用于負載均衡和路由請求的基本單元,定義后端服務的地址、端口、協議等信息


clusters:
-  name:定義集群的名稱。
-  type:指定集群類型,如 static, strict_dns, sds 等。
-  connect_timeout:連接超時時間。
-  lb_policy:負載均衡策略,如 round_robin, least_request 等。
-  hosts:指定集群的后端主機。
-  tls_context:配置 TLS。

routes(路由)

routes 字段用于定義路由規則。路由規則確定了Envoy在接收到請求時應該將其轉發到哪個后端服務


routes:
-   prefix:URL 前綴匹配。
-   cluster:指定請求應該轉發到的集群。
-   timeout:設置請求超時時間。
-   retry_policy:配置請求重試策略。

admin(管理控制)

admin是用于提供管理和監控功能的配置選項。通過 Envoy 的 admin`接口,用戶可以查看運行時統計信息、配置信息,執行一些診斷命令等


admin:
-   access_log_path:指定訪問日志文件的路徑。
-   address:指定 Envoy 管理界面的監聽地址和端口。

以下是一份配置實例,在項目目錄打開終端,輸入以下命令創建配置文件,并將配置內容復制到文件中。

touch envoy_conf.yaml


# Envoy 管理配置
admin:
  # 訪問日志路徑
  access_log_path: "/home/zhg/Mine/Workplace/getenvoy/envoy.log"
  # 管理界面監聽地址和端口
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10001


# 靜態資源配置
static_resources:
  listeners:
    # 定義一個監聽器,監聽在 0.0.0.0:10000
    - address:
        socket_address: { protocol: TCP, address: 0.0.0.0, port_value: 10000 }
      filter_chains:
        - filters:
            # 使用 HTTP 連接管理器過濾器
            - name: envoy.filters.network.http_connection_manager
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
                codec_type: auto
                stat_prefix: http
                access_log:
                  # 記錄 HTTP 請求到文件
                  - name: envoy.access_loggers.file
                    typed_config:
                      "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
                      path: "/home/zhg/Mine/Workplace/getenvoy/envoy_http.log"
                      log_format:
                        text_format: |
                          >>>>
                          start_time: "%START_TIME%"  
                          method: "%REQ(:METHOD)%", original_path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%", protocol: "%PROTOCOL%", response_code: "%RESPONSE_CODE%", response_flags: "%RESPONSE_FLAGS%"
                          user_agent: "%REQ(USER-AGENT)%"
                          authority: "%REQ(:AUTHORITY)%"
                          upstream_host: "%UPSTREAM_HOST%"
                          request_id: "%REQ(X-REQUEST-ID)%"
                          custom_header: "%REQ(custom_header)%"
                          static_header: "%REQ(static_header)%"
                route_config:
                  name: search_route
                  virtual_hosts:
                    - name: backend
                      domains:
                        - "*"
                      routes:
                        - match:
                            prefix: "/"
                          route:
                            # 將請求發送到 baidu 集群
                            cluster: baidu
                http_filters:
                  - name: envoy.filters.http.router
                    typed_config:
                      "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
    - name: baidu
      connect_timeout: 1s
      # 使用 STRICT_DNS 模式進行 DNS 解析
      type: STRICT_DNS
      dns_lookup_family: V4_ONLY
      lb_policy: round_robin
      load_assignment:
        cluster_name: baidu
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      # 目標服務器地址
                      address: www.baidu.com
                      port_value: 80
   

   

3 運行envoy

寫好配置文件后,就可以在項目目錄打開終端,輸入以下命令啟動envoy


# 通過靜態配置文件直接啟動 Envoy
# -l debug :設置日志級別為debug,可省略
./envoy -c envoy_conf.yaml -l debug


//查看幫助
envoy --help


4.測試

4.1 查看envoy admin

打開瀏覽器,輸入localhost:10001,可以看到envoy已經啟動起來,可以正常訪問admin頁面

4cffaf54-ae0c-11ee-8b88-92fbcf53809c.jpg

4.2 代理配置驗證

普通 curl 請求

curl -vvv baidu.com

zhg@zhg-pc:~/Mine/Workplace/envoytest$ curl -vvv baidu.com
*   Trying 39.156.66.10:80...
* Connected to baidu.com (39.156.66.10) port 80 (#0)
> GET / HTTP/1.1
> Host: baidu.com
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Thu, 16 Nov 2023 0354 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jan 2010 1300 GMT
< ETag: "51-47cf7e6ee8400"
< Accept-Ranges: bytes
< Content-Length: 81
< Cache-Control: max-age=86400
< Expires: Fri, 17 Nov 2023 0354 GMT
< Connection: Keep-Alive
< Content-Type: text/html
< 



* Connection #0 to host baidu.com left intact






4d130b26-ae0c-11ee-8b88-92fbcf53809c.jpg

使用 curl 訪問 Envoy,并添加 Header 字段 host: baidu.com

curl -v -H 'Host: baidu.com' 127.0.0.1:10000

可以看到請求被轉發到了 baidu.com,在響應頭中,server: envoy表示服務器使用的是 Envoy 代理。這是 Envoy 代理的標識,表示請求經過了 Envoy


zhg@zhg-pc:~/Mine/Workplace/envoytest$ curl -vvv -H 'Host: baidu.com' 127.0.0.1:15001
*   Trying 127.0.0.1:15001...
* Connected to 127.0.0.1 (127.0.0.1) port 15001 (#0)
> GET / HTTP/1.1
> Host: baidu.com
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< accept-ranges: bytes
< cache-control: private, no-cache, no-store, proxy-revalidate, no-transform
< content-length: 2381
< content-type: text/html
< date: Thu, 16 Nov 2023 03:45:17 GMT
< etag: "588604dc-94d"
< last-modified: Mon, 23 Jan 2017 13:27:56 GMT
< pragma: no-cache
< server: envoy
< set-cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
< x-envoy-upstream-service-time: 18
< 

...省略...

* Connection 

4d2554de-ae0c-11ee-8b88-92fbcf53809c.jpg

4.3 代理到本機web服務

4.3.1 修改配置

在clusters字段下增加一個名為"localserver"的集群,配置如下:

  clusters:
    - name: baidu
      connect_timeout: 1s
      # 使用 STRICT_DNS 模式進行 DNS 解析
      type: STRICT_DNS
      dns_lookup_family: V4_ONLY
      lb_policy: round_robin
      load_assignment:
        cluster_name: baidu
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      # 目標服務器地址
                      address: www.baidu.com
                      port_value: 80
    - name: localserver
      connect_timeout: 1s
      # 使用 STATIC 模式,直接指定目標地址
      type: STATIC
      dns_lookup_family: V4_ONLY
      lb_policy: round_robin
      load_assignment:
        cluster_name: localserver
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      # 本地服務器地址
                      address: 127.0.0.1
                      port_value: 9001




并將routes的cluster 修改為改localserver

  routes:
    - match:
        prefix: "/"
      route:
        # 將請求發送到 baidu 集群
        cluster: localserver


4.3.2 使用Python搭建簡易HTTP 服務器

適用:小型 web 項目在局域網內的預覽

編寫網頁

新建項目目錄和文件:web/index.html,并輸入以下內容,創建一個簡易的網頁以進行驗證。





    
    
    
    Document


     WebServer for hello Envoy! 


4.3.3 啟動http服務器

在項目目錄運行啟動http服務器

# 服務器默認監聽端口是 8000,支持自定義端口號
python3 -m http.server 9001


#服務器默認工作目錄為當前目錄,可通過 -d/--directory 參數指定工作目錄
python -m http.server --directory /tmp/




4.3.4 驗證地址

輸入以下命令獲取ubuntu的本機IP地址,假設ip是192.168.2.30


# ubuntu 查看本機ip地址
$ ip a


2.訪問網頁 例如ubuntu虛擬機所在的主機,使用瀏覽器連接ubuntu的ip地址,端口是envoy的監聽端口9000,即

http://192.168.2.30:10000/

這時候應該能看到Ubuntu本地服務器web/index.html網頁的內容,注意這里用的是10000端口,這是envoy程序的監聽端口,如果是9001則是http服務器的端口,

4d3df98a-ae0c-11ee-8b88-92fbcf53809c.jpg

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序
    +關注

    關注

    117

    文章

    3792

    瀏覽量

    81189
  • 網絡通信
    +關注

    關注

    4

    文章

    809

    瀏覽量

    29851
  • Ubuntu
    +關注

    關注

    5

    文章

    563

    瀏覽量

    29888
  • 云原生
    +關注

    關注

    0

    文章

    250

    瀏覽量

    7958

原文標題:ubuntu 下部署envoy 并作為前端代理方法

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ubuntu 用socks5代理上網,求助

    ubuntu 11.10 里面有沒有類似proxifier的代理上網工具呢?
    發表于 07-18 15:28

    【OK210試用體驗】搭建遠程ubuntu服務之二 ubuntu代理上網

    本帖最后由 耳東的刀 于 2015-7-24 12:58 編輯 因為學校是銳捷上網。一個人一個銳捷號,懶得找學校的網絡管理員,ubuntu安裝銳捷銳捷客戶端我不會,那么設置代理上網相對簡單
    發表于 07-24 12:56

    淺談Service Mesh體系中的Envoy

    部署和使用Envoy能夠帶來很好的運行效率。非常有意思的表述,Envoy并沒有把追求極致性能作為目標,那么其架構設計會弱化性能這塊嗎?目前業內公認
    發表于 07-12 17:25

    基于Ubuntu的Django+uwsgi+nginx項目部署步驟

    Ubuntu 部署Django+uwsgi+nginx項目前 搭建必要環境
    發表于 07-09 09:36

    Linux服務器的vue項目部署方法

    最近剛到新公司,正好之前沒接觸過這方面的東西。最初僅僅是猜想。最后也沒想到Tomcat真的可以部署前端頁面
    發表于 07-16 08:10

    JAVA如何生成UUID并作為數據庫表的ID

    JAVA生成UUID并作為數據庫表的ID
    發表于 06-02 16:59

    qt源碼庫在樹莓派中的部署方法

    接安裝qt。本文介紹最普遍的部署方式,就是在pc端的ubuntu中交叉編譯庫源碼,然后上傳編譯好的庫到樹莓派,最后配置qt creator交叉編譯的kit來實現在pc端編譯自碼程序,上傳到樹莓派運行。...
    發表于 12-24 06:44

    XR806是否可用類似SDIO接口與CPU連接,并作為Linux的一個外設網卡設備?

    如題:XR806是否可用類似SDIO接口與CPU連接,并作為Linux的一個外設網卡設備?
    發表于 03-11 15:02

    Ubuntu系統Linux學習環境的配置方法

    Ubuntu系統Linux學習環境的配置方法分享: Ubuntu14.04出來后我心血來潮卸載了fedora系統想換下Ubuntu系統嘗嘗鮮,沖動的結果是發現原來在fedora學習li
    發表于 11-21 14:45 ?1309次閱讀

    差壓液位計的常見故障及處理方法

    3、4號機組差壓液位計有兩種布置方式:其一是正壓側儀表管線上設置平衡容器與被測容器上部空間連通,負壓側儀表管線與被測容器下部相連并作為測量零點,適用于密閉容器;其二是正壓側儀表管線與被測容器下部相連
    發表于 08-20 09:05 ?1.2w次閱讀

    Ubuntu 22.10使用GNOME Console作為默認終端

    Bicha 在 5 月的提案指出,建議 Ubuntu 22.10 使用 GNOME Console 作為默認終端,這其實也是遵循 GNOME 上游的變化。而且 GNOME Console 比
    的頭像 發表于 08-08 16:15 ?906次閱讀

    ubuntu與windows之間的文件互傳方法

    。因此在開發的過程中會經常在 Windows和 Ubuntu兩者間切換,同時還需要頻繁的進行文件互傳。一般情況下,ubuntu 與 windows 之間的文件互傳有如下三種方法
    的頭像 發表于 04-17 15:03 ?1.1w次閱讀
    <b class='flag-5'>ubuntu</b>與windows之間的文件互傳<b class='flag-5'>方法</b>

    既然有了Kubernetes,為什么還需要Istio?

    Envoy 引入了 xDS 協議,該協議受到各種開源軟件的支持,例如Istio、MOSN等。Envoy 將 xDS 貢獻給服務網格或云原生基礎設施。Envoy 本質上是一個現代版本的代理
    的頭像 發表于 12-11 17:28 ?993次閱讀
    既然有了Kubernetes,為什么還需要Istio?

    如何在Windows中安裝Ubuntu系統

    在Windows中安裝Ubuntu系統通常有兩種方法:使用虛擬機軟件安裝Ubuntu作為虛擬機,或者使用雙啟動安裝Ubuntu與Window
    的頭像 發表于 12-12 14:29 ?625次閱讀

    Ubuntu系統常見問題及解決方法

    Ubuntu是一個基于Linux的開源操作系統,以其穩定性和易用性而受到許多用戶的喜愛。然而,在使用過程中,用戶可能會遇到各種問題。以下是一些Ubuntu系統中常見的問題及其解決方法。 1. 無法
    的頭像 發表于 12-12 14:32 ?463次閱讀
    主站蜘蛛池模板: 中文字幕一区二区三区在线不卡 | 亚洲综合AV色婷婷五月蜜臀| 最近的2019中文字幕国语版| 二级毛片在线观看| 2019在秋霞理论| 干性感美女| 久久亚洲高清观看| 伦理片97影视网| 免费在线视频一区| 小莹的性荡生活45章| www.x日本| 国产成人精品电影在线观看| 蕾丝边娱乐网| 亚洲免费成人| 5580免费午夜福利院| 99久久爱re热6在线播放| 国内一级一级毛片a免费| 日本孕妇大胆孕交| 翁止熄痒禁伦短文合集免费视频| 羞羞漫画视频| 一个人高清在线观看日本免费 | 在线播放一区| 99久久国产综合精品成人影院| 国产亚洲视频精彩在线播放| 精品国产乱码久久久久乱码| 我解开了岳的乳第一个女人 | 亚洲色播永久网址大全| 国产精品久久久久久久人人看| 好紧好湿太硬了我太爽了文字| 色欲无码国产喷水AV精品| av在线观看地址| 国产无遮挡无码视频在线观看不卡| 九九久久久2| 亚洲精品第一页| 13小箩利洗澡无码视频APP| 回复术士勇者免费观看全集| 男人被绑着强行摸j| 少女亚洲free| 富婆夜店找黑人猛男BD在线| 日夜啪啪一区二区三区| 曰产无码久久久久久精品|