Consul 1.13 正式發(fā)布,包括這些重大更新
此版本增強(qiáng)了 Consul 中的許多功能,同時(shí)添加了 Consul on Kubernetes CNI 插件和集群對(duì)等測(cè)試版等新功能。
前兩天,HashiCorp Consul 1.13 正式發(fā)布。此版本幫助組織降低運(yùn)營(yíng)復(fù)雜性、大規(guī)模高效運(yùn)行 Consul 并將服務(wù)網(wǎng)格安全地集成到其應(yīng)用程序工作流中又邁出的一大步。
Consul 1.13 中的新功能包括 Consul on Kubernetes CNI 插件、用于 Envoy 故障排除的 CLI 增強(qiáng)、Terminating Gateways 的增強(qiáng)和集群對(duì)等(測(cè)試版)。
Consul on Kubernetes CNI 插件
默認(rèn)情況下,Kubernetes 上的 Consul 會(huì)注入一個(gè) init 容器,??consul-connect-inject-init?
?它通過配置 sidecar 代理來設(shè)置透明代理流量重定向,以便應(yīng)用程序可以輕松地在網(wǎng)格內(nèi)進(jìn)行通信而無需任何修改。在 pod 中部署 init 容器以設(shè)置透明代理需要 pod 具有足夠的 Kubernetes RBAC 權(quán)限來部署具有??CAP_NET_ADMIN?
?Linux 功能的容器。但是,對(duì)于具有非常嚴(yán)格的安全標(biāo)準(zhǔn)的組織來說,將 pod 配置為以這種升級(jí)的權(quán)限進(jìn)行部署是有問題的,因此是網(wǎng)格采用的障礙。
作為 Consul 1.13 版本的一部分,Kubernetes 上的 Consul 現(xiàn)在將分發(fā)一個(gè)鏈?zhǔn)?CNI(容器網(wǎng)絡(luò)接口)插件,用于處理 pod 生命周期網(wǎng)絡(luò)設(shè)置階段的流量重定向配置。??CAP_NET_ADMIN?
?這取代了使用 init 容器應(yīng)用流量重定向規(guī)則的要求,并刪除了在將工作負(fù)載部署到服務(wù)網(wǎng)格時(shí)允許特權(quán)的任何要求。CNI 插件計(jì)劃在 consul-k8s [1] 0.48.0 中發(fā)布,將在 Consul 1.13 中得到支持。
Consul on Kubernetes CLI 增強(qiáng) Envoy 故障排除
在診斷服務(wù)網(wǎng)格中的流量管理問題時(shí),用戶通常依靠 Envoy 代理配置來快速識(shí)別和解決在將應(yīng)用程序部署到網(wǎng)格上時(shí)出現(xiàn)的配置問題。Kubernetes 上的 Consul 現(xiàn)在提供了額外的 CLI 命令,以通過??consul-k8s proxy list?
?和??consul-k8s proxy read <pod name>?
?命令快速解決 Envoy 配置問題。
該??consul-k8s proxy list?
?命令提供了具有由 Consul 管理的 Envoy 代理的所有 pod 的列表。Pod 和其??Type?
?一起列出,這決定了 proxy 是 sidecar 還是作為 Consul 部署的網(wǎng)關(guān)的一部分。
Namespace: All Namespaces
Namespace Name Type
consul consul-ingress-gateway-6fb5544485-br6fl Ingress Gateway
consul consul-ingress-gateway-6fb5544485-m54sp Ingress Gateway
default backend-658b679b45-d5xlb Sidecar
default client-767ccfc8f9-6f6gx Sidecar
default client-767ccfc8f9-f8nsn Sidecar
default client-767ccfc8f9-ggrtx Sidecar
default frontend-676564547c-v2mfq Sidecar
該??consul-k8s proxy read <pod name>?
?命令允許您檢查為給定 pod 運(yùn)行的任何 Envoy 的配置。默認(rèn)情況下,該命令會(huì)列出 Envoy 代理已配置的可用 Envoy 集群、偵聽器、端點(diǎn)、路由和 secrets,如下所示:
Envoy configuration for backend-658b679b45-d5xlb in namespace default:
==> Clusters (5)
Name FQDN Endpoints Type Last Updated
local_agent local_agent 192.168.79.187:8502 STATIC 2022-05-13T04:22:39.553Z
client client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 192.168.18.110:20000, 192.168.52.101:20000, 192.168.65.131:20000 EDS 2022-08-10T12:30:32.326Z
frontend frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 192.168.63.120:20000 EDS 2022-08-10T12:30:32.233Z
local_app local_app 127.0.0.1:8080 STATIC 2022-05-13T04:22:39.655Z
original-destination original-destination ORIGINAL_DST 2022-05-13T04:22:39.743Z
==> Endpoints (6)
Address:Port Cluster Weight Status
192.168.79.187:8502 local_agent 1.00 [32mHEALTHY[0m
192.168.18.110:20000 client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 1.00 [32mHEALTHY[0m
192.168.52.101:20000 client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 1.00 [32mHEALTHY[0m
192.168.65.131:20000 client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 1.00 [32mHEALTHY[0m
192.168.63.120:20000 frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 1.00 [32mHEALTHY[0m
127.0.0.1:8080 local_app 1.00 [32mHEALTHY[0m
==> Listeners (2)
Name Address:Port Direction Filter Chain Match Filters Last Updated
public_listener 192.168.69.179:20000 INBOUND Any * to local_app/ 2022-08-10T12:30:47.142Z
outbound_listener 127.0.0.1:15001 OUTBOUND 10.100.134.173/32, 240.0.0.3/32 to client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul 2022-07-18T15:31:03.246Z
10.100.31.2/32, 240.0.0.5/32 to frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul
Any to original-destination
==> Routes (1)
Name Destination Cluster Last Updated
public_listener local_app/ 2022-08-10T12:30:47.141Z
==> Secrets (0)
Name Type Last Updated
Terminating Gateways 增強(qiáng)功能
用戶希望能夠通過 Terminating Gateways 將路由連接到所有外部目的地(即注冊(cè)到 Consul 的服務(wù)和未注冊(cè)到 Consul 的服務(wù))。目標(biāo)是為離開其網(wǎng)格的流量建立眾所周知的出口點(diǎn),根據(jù)定義的訪問策略授權(quán)連接,并確保流量在允許其出口服務(wù)網(wǎng)格之前滿足安全要求。在 1.13 版本中,Consul 的終端網(wǎng)關(guān)得到了增強(qiáng),可以使用透明代理與外部服務(wù)通信。
在 Consul 1.13 之前,下游服務(wù)可以通過 Terminating Gateways 訪問外部服務(wù),方法是通過靜態(tài)配置的 upstream[2]公開服務(wù),或者使用透明代理并使用其 Consul 分配的虛擬服務(wù)主機(jī)名[3]連接到服務(wù)。在某些情況下,可能需要或希望使用其真實(shí)主機(jī)名(例如www.example.com[4])而不是服務(wù)網(wǎng)格內(nèi)部的地址與外部服務(wù)進(jìn)行通信。
Consul 1.13 通過允許管理員創(chuàng)建一個(gè)允許的外部主機(jī)名或 IP 地址列表來實(shí)現(xiàn)與外部服務(wù)的無縫通信,這些外部主機(jī)名或 IP 地址可以被下游服務(wù)訪問,并將這些連接匯集到 Terminating Gateways,該網(wǎng)關(guān)充當(dāng)退出流量的中心出口點(diǎn)服務(wù)網(wǎng)格。
集群對(duì)等(測(cè)試版)
在大型企業(yè)中,平臺(tái)團(tuán)隊(duì)[5]的任務(wù)通常是為整個(gè)組織提供標(biāo)準(zhǔn)的網(wǎng)絡(luò)解決方案。通常這些團(tuán)隊(duì)已經(jīng)對(duì)云提供商和運(yùn)行時(shí)平臺(tái)做出了自己的選擇,但平臺(tái)團(tuán)隊(duì)仍然需要啟用安全的跨團(tuán)隊(duì)連接。為了使其發(fā)揮作用,該組織需要像 Consul 這樣的共享網(wǎng)絡(luò)技術(shù),它可以在任何地方使用。Consul 在 1.13 中通過名為 ??cluster peering?
? 的新功能增強(qiáng)了其跨團(tuán)隊(duì)功能。
集群對(duì)等之前
Consul 當(dāng)前的聯(lián)合模型基于這樣一種理念,即所有Consul 數(shù)據(jù)中心[6](也稱為集群)都由一個(gè)共同的管理控制來管理。假設(shè)安全密鑰、策略和升級(jí)活動(dòng)在整個(gè)聯(lián)盟中進(jìn)行協(xié)調(diào)。網(wǎng)格配置和服務(wù)身份也是全局的,這意味著特定于服務(wù)的配置、路由和意圖[7]被假定由同一個(gè)團(tuán)隊(duì)管理,在所有數(shù)據(jù)中心都有單一的事實(shí)來源。
該模型還需要數(shù)據(jù)中心之間的全網(wǎng)狀網(wǎng)絡(luò)連接,以及與遠(yuǎn)程數(shù)據(jù)中心的相對(duì)穩(wěn)定的連接。如果這與您管理基礎(chǔ)設(shè)施的方式相匹配,WAN 聯(lián)合提供了一個(gè)相對(duì)簡(jiǎn)單的解決方案:只需少量配置,每個(gè)服務(wù)都可以跨所有數(shù)據(jù)中心連接到所有其他服務(wù)。
公共管理邊界
WAN 聯(lián)合的優(yōu)點(diǎn)包括:
- 共享密鑰
- 協(xié)調(diào)升級(jí)
- 靜態(tài)主數(shù)據(jù)中心
然而,許多組織正在將 Consul 部署到由跨不同網(wǎng)絡(luò)邊界的獨(dú)立團(tuán)隊(duì)管理的環(huán)境中。這些團(tuán)隊(duì)通常需要能夠與一些(但不是全部)集群建立服務(wù)連接,同時(shí)保留操作自主權(quán)來定義特定于他們需求的服務(wù)網(wǎng)格配置,而不會(huì)與聯(lián)盟中其他集群中定義的配置發(fā)生沖突。這突出了 WAN 聯(lián)合模型中的一些限制:
- 依賴與主數(shù)據(jù)中心的連接。
- 假設(shè)整個(gè)聯(lián)邦的資源相同。
- 難以支持復(fù)雜的中心輻射型拓?fù)洹?/li>
使用集群對(duì)等
單獨(dú)的管理邊界
通過集群對(duì)等,每個(gè)集群都是自治的,擁有自己的密鑰、目錄和訪問控制列表 (ACL) 信息。沒有主數(shù)據(jù)中心的概念。
集群管理員明確地與他們需要連接的集群建立關(guān)系(或“對(duì)等”)。對(duì)等集群會(huì)自動(dòng)交換明確向其他對(duì)等方公開的服務(wù)的相關(guān)目錄信息。
集群對(duì)等
在 Consul 1.13 的開源版本中,集群對(duì)等將使運(yùn)營(yíng)商能夠在 Consul 數(shù)據(jù)中心之間建立安全的服務(wù)連接,無論網(wǎng)絡(luò)拓?fù)浠驁F(tuán)隊(duì)所有權(quán)是什么樣的。
集群對(duì)等提供了跨團(tuán)隊(duì)、集群和網(wǎng)絡(luò)邊界的任意組合連接服務(wù)的靈活性。好處包括:
- 細(xì)粒度連接
- 最小耦合
- 運(yùn)營(yíng)自主權(quán)
- 支持中心輻射型對(duì)等關(guān)系
集群對(duì)等使用戶能夠跨內(nèi)部和外部組織邊界安全地連接應(yīng)用程序,同時(shí)保持相互 TLS 提供的安全性以及獨(dú)立服務(wù)網(wǎng)格之間的自治。
Consul Enterprise 中的集群對(duì)等互連
Admin Partitions 是 Consul 1.11[8]中引入的一項(xiàng)企業(yè)功能,它為不同的團(tuán)隊(duì)提供改進(jìn)的多租戶,以便使用單個(gè)共享的 Consul 控制平面開發(fā)、測(cè)試和運(yùn)行他們的生產(chǎn)服務(wù)。Admin Partitions[9]讓您的平臺(tái)團(tuán)隊(duì)可以操作共享服務(wù)器以支持多個(gè)應(yīng)用程序團(tuán)隊(duì)和集群。但是,Consul 1.11 中的 Admin Partitions 僅支持連接單個(gè)區(qū)域中相同服務(wù)器上的分區(qū)。
現(xiàn)在,通過集群對(duì)等,分區(qū)所有者可以與位于同一 Consul 數(shù)據(jù)中心或不同區(qū)域的集群或分區(qū)建立對(duì)等。對(duì)等關(guān)系獨(dú)立于任何其他團(tuán)隊(duì)的分區(qū),即使它們共享相同的 Consul 服務(wù)器。
Consul Enterprise 中的集群對(duì)等
集群對(duì)等是 Consul 的一個(gè)令人興奮的新增功能,它使運(yùn)營(yíng)商在跨組織邊界連接服務(wù)方面具有更大的靈活性。
請(qǐng)注意,集群對(duì)等并不打算立即取代 WAN 聯(lián)合。從長(zhǎng)遠(yuǎn)來看,在集群對(duì)等互連具有與 WAN 聯(lián)合的所有特性相同的特性之前,需要額外的功能。如果您已經(jīng)在使用 WAN 聯(lián)合,則無需立即將現(xiàn)有集群遷移到集群對(duì)等互連。
下一步
HashiCorp Consul 的目標(biāo)是提供一個(gè)企業(yè)就緒、一致的控制平面來發(fā)現(xiàn)和安全連接任何應(yīng)用程序。如需更多信息,請(qǐng)?jiān)L問Consul 文檔[10]。要開始使用 Consul 1.13,請(qǐng)從我們的發(fā)布頁面下載相應(yīng)的操作系統(tǒng)二進(jìn)制文件,或安裝支持 Consul 1.13 for Kubernetes 的最新Helm Chart 包[11]。?
參考資料
[1]consul-k8s : https://github.com/hashicorp/consul-k8s/releases
[2]靜態(tài)配置的 upstream: https://www.consul.io/docs/connect/registration/service-registration#upstream-configuration-reference
[3]虛擬服務(wù)主機(jī)名: https://www.consul.io/docs/discovery/dns#service-virtual-ip-lookups
[4]www.example.com: https://www.hashicorp.com/blog/www.example.com
[5]平臺(tái)團(tuán)隊(duì): https://www.hashicorp.com/cloud-operating-model
[6]Consul 數(shù)據(jù)中心: https://www.consul.io/docs/install/glossary#datacenter
[7]意圖: https://learn.hashicorp.com/tutorials/consul/service-mesh-application-aware-intentions?in=consul/developer-mesh
[8]Consul 1.11: https://www.hashicorp.com/blog/announcing-hashicorp-consul-1-11
[9]Admin Partitions: https://www.hashicorp.com/blog/achieving-multi-tenancy-with-consul-administrative-partitions
[10]Consul 文檔: https://www.consul.io/docs
[11]Helm Chart 包: https://github.com/hashicorp/consul-k8s/releases