日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Administration interface

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Administration interface 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Administration interface和Layered Runtime

管理接口admin

Envoy內建了一個管理服務(administration server),它支持查詢和修改操作,甚至有可能暴露私有數據(例如統計數據、集群名稱和證書信息等),因此非常有必要精心編排其訪問控制機制以避免非授權訪問;

admin:access_log: [] # 訪問日志協議的相關配置,通常需要指定日志過濾器及日志配置等;access_log_path: ... # 管理接口的訪問日志文件路徑,無須記錄訪問日志時使用/dev/null;profile_path: ... # cpu profiler的輸出路徑,默認為/var/log/envoy/envoy.prof;address: # 監聽的套接字;socket_address: protocol: ...address: ...port_value: ...

下面是一個簡單的配置示例

admin: access_log_path: /tmp/admin_access.log address: socket_address: { address: 0.0.0.0, port_value: 9901 } # 提示:此處 僅為出于方便測試的目的,才設定其監聽于對外通信的任意IP地址;安全起見,應該使用127.0.0.1;

為Envoy添加Admin Interface

以前面一節中配置的“L7 Front Proxy”添加管理接口的方法,僅需要在其用到的envoy.yaml

配置文件中添加相關的配置信息即可;

下面給出的簡單的測試命令

admin: access_log_path: /tmp/admin_access.log address: socket_address: { address: 0.0.0.0, port_value: 9901 } static_resources: listeners: - name: listener_0 address: socket_address: { address: 0.0.0.0, port_value: 80 } filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http codec_type: AUTO …… clusters: - name: local_cluster connect_timeout: 0.25s type: STATIC …… ~$ curl 172.31.5.2:9901/listeners listener_0::0.0.0.0:80 ~$ curl 172.31.5.2:9901/ready LIVE ~$ curl 172.31.5.2:9901/config_dump { "configs": [ { "@type": "type.googleapis.com/envoy.admin.v3.BootstrapConfigDump", "bootstrap": { "node": { "hidden_envoy_deprecated_build_version": "98c1c9e9a40804b93b074badad1cdf284b47d58b/1.18.3/Clean/RELEAS E/BoringSSL", "user_agent_name": "envoy", "user_agent_build_version": { "version": { "major_number": 1, "minor_number": 18, "patch": 3 }, …… }

管理接口admin速覽

admin接口內置了多個/path,不同的path可能會分別接受不同的GET或POST請求;

admin commands are: /: Admin home page # GET /ready:Outputs a string and error code reflecting the state of the server. # GET,返回envoy服務當前的狀態; /certs: print certs on machine # GET,列出已加載的所有TLS證書及相關的信息; /clusters: upstream cluster status # GET,額外支持使用“GET /clusters?format=json” /config_dump: dump current Envoy configs # GET,打印Envoy加載的各類配置信息;支持include_eds、master和resource等查詢參數; /contention: dump current Envoy mutex contention stats (if enabled) # GET,互斥跟蹤 /cpuprofiler: enable/disable the CPU profiler # POST,啟用或禁用cpuprofiler /healthcheck/fail: cause the server to fail health checks # POST,強制設定HTTP健康狀態檢查為失敗; /healthcheck/ok: cause the server to pass health checks # POST,強制設定HTTP健康狀態檢查為成功; /heapprofiler: enable/disable the heap profiler # POST,啟用或禁用heapprofiler; /help: print out list of admin commands /hot_restart_version: print the hot restart compatibility version # GET,打印熱重啟相關的信息; /listeners: print listener addresses # GET,列出所有偵聽器,支持使用“GET /listeners?format=json” /drain_listeners:Drains all listeners. # POST,驅逐所有的listener,支持使用inboundonly(僅入站偵聽器)和graceful(優雅關閉)等查詢參數; /logging: query/change logging levels # POST,啟用或禁用不同子組件上的不同日志記錄級別 /memory: print current allocation/heap usage # POST,打印當前內在分配信息,以字節為單位; /quitquitquit: exit the server # POST,干凈退出服務器; /reset_counters: reset all counters to zero # POST,重圍所有計數器; /tap:This endpoint is used for configuring an active tap session. # POST,用于配置活動的帶標簽的session; //reopen_logs:Triggers reopen of all access logs. Behavior is similar to SIGUSR1 handling. # POST,重新打開所有的日志,功能類似于SIGUSR1信號; /runtime: print runtime values # GET,以json格式輸出所有運行時相關值; /runtime_modify: modify runtime values # POST /runtime_modify?key1=value1&key2=value2,添加或修改在查詢參數中傳遞的運行時值 /server_info: print server version/status information # GET,打印當前Envoy Server的相關信息; /stats: print server stats # 按需輸出統計數據,例如GET /stats?filter=regex,另外還支持json和prometheus兩種輸出格式; /stats/prometheus: print server stats in prometheus format # 輸出prometheus格式的統計信息;

管理接口

幾個示例輸出

? GET /clusters:列出所有已配置的集群,包括每個集群中發現的所有上游主機以及每個主機的統計信息;支持輸出為json格式;

◆ 集群管理器信息:“version_info string”,無CDS時,則顯示為“version_info::static”

◆ 集群相關的信息:斷路器、異常點檢測和用于表示是否通過CDS添加的標識“add_via_api”

◆ 每個主機的統計信息:包括總連接數、活動連接數、總請求數和主機的健康狀態等;不健康的原因通常有以下三種

  • failed_active_hc:未通過主動健康狀態檢測;

  • failed_eds_health:被EDS標記為不健康;

  • failed_outlier_check:未通過異常檢測機制的檢查;

? GET /listeners:列出所有已配置的偵聽器,包括偵聽器的名稱以及監聽的地址;支持輸出為json格式;

? POST /reset_counters:將所有計數器重圍為0;不過,它只會影響Server本地的輸出,對于已經發送到

外部存儲系統的統計數據無效;

? GET /config_dump:以json格式打印當前從Envoy的各種組件加載的配置信息;

? GET /ready:獲取Server就緒與否的狀態,LIVE狀態為200,否則為503;

集群統計信息中主機的狀態說明

Envoy 運行時配置概述

相較于靜態資源配置來說,xDS API的動態配置機制使得Envoy的配置系統極具彈性;

? 但有時候配置的變動僅需要修改個別的功能特性,若通過xDS接口完成未免有些動靜過大,Runtime便是面向這種場景的配置接口;

? Runtime就是一個虛擬文件系統樹,可通過一至多個本地文件系統目錄、靜態資源、RTDS動態發現和Admin Interface進行定義和配置;

◆ 每個配置稱為一個Layer,因而也稱為“Layered Runtime”,這些Layer最終疊加生效;

換句話說,Runtime是與Envoy一起部署的外置實時配置系統,用于支持更改配置設置而無需重啟Envoy或更改主配置;

? 運行時配置相關的運行時參數也稱為“功能標志(feature flags)”或“決策者(decider)”;

? 通過運行時參數更改配置將實時生效;

運行時配置的實現也稱為運行時配置供應者;

? Envoy當前支持的運行時配置的實現是由多個層級組成的虛擬文件系統

◆ Envoy在配置的目錄中監視符號鏈接的交換空間,并在發生交換時重新加載文件樹;

? 但Envoy會使用默認運行時值和“null”提供給程序以確保其正確運行,因此,運行時配置系統并不必不可少;

配置Envoy運行時環境

啟用Envoy的運行時配置機制需要在Bootstrap文件中予以啟用和配置

?定義在bootstrap配置文件中的layered_runtime頂級字段之下

? 一旦在bootstrap中給出layered_runtime字段,則至少要定義出一個layer;

layered_runtime: # 配置運行配置供應者,未指定時則使用null供應者,即所有參數均加載其默認值; layers: # 運行時的層級列表,后面的層將覆蓋先前層上的配置; - name: ... # 運行時的層級名稱,僅用于“GET /runtime”時的輸出; static_layer: {...} # 靜態運行時層級,遵循運行時probobuf JSON表示編碼格式;不同于靜態的xDS資源,靜態運行時層一樣可被后面的層所覆蓋; # 此項配置,以及后面三個層級類型彼此互斥,因此一個列表項中僅可定義一層; disk_layer: {...} # 基于本地磁盤的運行時層級; symlink_root: ... # 通過符號鏈接訪問的文件系統樹; subdirectory: ... # 指定要在根目錄中加載的子目錄; append_service_cluster: ... # 是否將服務集群附加至符號鏈接根目錄下的子路徑上; admin_layer: {...} # 管理控制臺運行時層級,即通過/runtime管理端點查看,通過/runtime_modify管理端點修改的配置方式; rtds_layer: {...} # 運行時發現服務(runtime discovery service)層級,即通過xDS API中的RTDS API動態發現相關的層級配置; name: ... # 在rtds_config上為RTDS層訂閱的資源; rtds_config:RTDS的ConfigSource;

Front Proxy and TlS

Front proxy

在Envoy Mesh中,作為Front Proxy的Envoy通常是獨立運行的進程,它將客戶端請求代理至Mesh中的各Service,而這些Service中的每個應用實例都會隱藏于一個Sidecar Proxy模式的envoy

實例背后;

? 我們這里仍然以docker-compose為編排工具,以便于將更多的精力集中于Envoy及Mesh之上

TLS

Envoy Mesh 中的TLS模式大體有如下幾種常用場景

Front Proxy面向下游客戶端提供https服務,但Front Proxy、Mesh內部的各服務間依然使用http協議

◆ https → http

? Front Proxy面向下游客戶端提供https服務,而且Front Proxy、Mesh內部的各服務間也使用https協議

◆ https → https

◆ 但是內部各Service間的通信也有如下兩種情形

  • 僅客戶端驗證服務端證書

  • 客戶端與服務端之間互相驗證彼此的證書(mTLS)

◆ 注意:對于容器化的動態環境來說,證書預配和管理將成為顯著難題

? Front Proxy直接以TCP Proxy的代理模式,在下游客戶端與上游服務端之間透傳tls協議;

◆ https-passthrough

◆ 集群內部的東西向流量同樣工作于https協議模型

TLS Front Proxy

僅需要配置Listener面向下游客戶端提供tls通信,下面是Front Proxy Envoy的配置示例

static_resources:listeners:- name: listener_httpaddress:socket_address: { address: 0.0.0.0, port_value: 8443 }filter_chains: - filters:- name: envoy.filters.network.http_connection_managertyped_config: @type":type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerstat_prefix: ingress_httpcodec_type: AUTOroute_config:name: local_routevirtual_hosts:- name: web_service_01domains: ["*"]routes:- match: { prefix: "/" }route: { cluster: web_cluster_01 }http_filters: - name: envoy.filters.http.routertransport_socket:name: envoy.transport_sockets.tlstyped_config:"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContextcommon_tls_context:tls_certificates:# The following self-signed certificate pair is generated using:# $ openssl req -x509 -newkey rsa:2048 -keyout front-proxy.key -out front-proxy.crt -days 3650 -nodes -subj '/CN=www.magedu.com'- certificate_chain:filename: "/etc/envoy/certs/front-proxy.crt"private_key:filename: "/etc/envoy/certs/front-proxy.key“

Upstream and downstream TLS

除了Listener中面向下游提供tls通信,Front Proxy還要以tls協議與Envoy Mesh中的各Service建

立tls連接;

? 下面左側是Envoy Mesh中的某Service的Sidecar Proxy Envoy的配置示例,右則是Front Proxy Envoy

中的Cluster面向上游通信的配置示例

static_resources:listeners:- name: listener_0address:socket_address: { address: 0.0.0.0, port_value: 443 }filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:……http_filters: - name: envoy.filters.http.router transport_socket: name: envoy.transport_sockets.tls typed_config: "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext common_tls_context: tls_certificates: - certificate_chain: filename: "/etc/envoy/certs/webserver.crt" private_key: filename: "/etc/envoy/certs/webserver.key" clusters: - name: web_cluster_01connect_timeout: 0.25stype: STATIClb_policy: ROUND_ROBINload_assignment:cluster_name: web_cluster_01endpoints:- lb_endpoints:- endpoint:address:socket_address: { address: 172.31.8.11, port_value: 443 }- endpoint:address:socket_address: { address: 172.31.8.12, port_value: 443 }transport_socket:name: envoy.transport_sockets.tlstyped_config:"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext

Front Proxy https passthrough

TLS passthrough模式的Front Proxy需要使用TCP Proxy類型的Listener,Cluster的相關配置中也無需再指定transport_socket相關的配置;

? 但Envoy Mesh中各Service需要基于tls提供服務

static_resources:listeners:- name: listener_httpaddress:socket_address: { address: 0.0.0.0, port_value: 8443 }filter_chains:- filters:- name: envoy.filters.network.tcp_proxytyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxycluster: web_cluster_01stat_prefix: https_passthroughclusters:- name: web_cluster_01connect_timeout: 0.25stype: STATIClb_policy: ROUND_ROBINload_assignment:cluster_name: web_cluster_01endpoints:- lb_endpoints:- endpoint:address:socket_address: { address: 172.31.9.11, port_value: 443 }- endpoint:address:socket_address: { address: 172.31.9.12, port_value: 443 }

總結

以上是生活随笔為你收集整理的Administration interface的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。