時(shí)隔一個(gè)月,新版本又來(lái)了。這次的 APISIX 3.1.0 是 3.0 大版本以來(lái)的第一個(gè)新版本,在 3.x 的新時(shí)代里,我們一如既往地在每個(gè)版本中給大家奉上更多的新功能。
此次發(fā)布的 3.1.0 版本,添加了對(duì)插件配置的加密存儲(chǔ)和存儲(chǔ)在外部安全服務(wù)的支持,著重于讓用戶能夠更安全、更放心地使用他們的配置。在這之外,我們還引入了許多新的特性,旨在優(yōu)化對(duì) APISIX 的使用體驗(yàn)。
新特性:插件配置的加密存儲(chǔ)
(資料圖片)
新版本支持將插件的特定字段加密保存到 etcd 中。
在之前的版本中,APISIX 提供了一個(gè)key_encrypt_salt的配置項(xiàng),支持對(duì) etcd 里面存儲(chǔ)的 SSL key 進(jìn)行加密,避免明文存儲(chǔ)私鑰數(shù)據(jù)。畢竟像私鑰這樣的敏感數(shù)據(jù),少一個(gè)地方存儲(chǔ)明文,就能多一份安心。那么對(duì)于其他同樣敏感的配置,比如jwt-auth插件中的 secret,我們能不能也加密起來(lái),避免在 etcd 里面存儲(chǔ)明文呢?
3.1 版本中就把加密存儲(chǔ)的功能拓展到其他字段上。有了這個(gè)功能,我們可以在某個(gè)特定的插件上指定需要加密的字段,然后在config.yaml文件中開(kāi)啟加密,即可避免明文存儲(chǔ)。
舉個(gè)例子,我們給jwt-auth插件新增了如下的標(biāo)記:
encrypt_fields = {"secret", "private_key"},
當(dāng)我們?cè)赾onfig.yaml里開(kāi)啟了字段的加密功能:
apisix: data_encryption: enable: true keyring: - edd1c9f0985e76a2
那么寫入到 etcd 的jwt-auth插件的配置中的 secret 和 private_key,就會(huì)被加密存儲(chǔ)。通過(guò)etcdctl get --prefix /看到的配置,會(huì)是諸如 “"secret":"77+NmbYqNfN+oL..."” 這樣的數(shù)據(jù),而不是原始的配置信息。
新特性:將敏感信息存儲(chǔ)在外部安全服務(wù)
除了可以將敏感信息加密存儲(chǔ)在 etcd 之外,還可以選擇從別的系統(tǒng)中動(dòng)態(tài)獲取敏感信息,而不再要求敏感信息必須存儲(chǔ)在 APISIX 的配置存儲(chǔ)(如 etcd)中。
在 3.1 版本中,我們上線了名為 APISIX Secret 的功能。APISIX Secret 允許用戶在 APISIX 中通過(guò)一些密鑰管理服務(wù)(Vault 等)來(lái)存儲(chǔ) secret,在使用的時(shí)候根據(jù) key 進(jìn)行讀取,確保 secret 在整個(gè)平臺(tái)中不以明文的形式存在。
APISIX 目前支持通過(guò)以下方式存儲(chǔ) secret:
環(huán)境變量HashiCorp Vault相關(guān)示例
以key-auth插件為例,我們來(lái)簡(jiǎn)單示范下如何使用該特性。
基于環(huán)境變量的敏感信息存儲(chǔ)
第一步:APISIX 實(shí)例啟動(dòng)前創(chuàng)建環(huán)境變量
export JACK_AUTH_KEY=abc
第二步:在key-auth插件中引用環(huán)境變量
curl http://127.0.0.1:9180/apisix/admin/consumers \\-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d "{ "username": "jack", "plugins": { "key-auth": { "key": "$ENV://JACK_AUTH_KEY" } }}"
通過(guò)以上步驟,可以將key-auth插件中的 key 配置保存在環(huán)境變量中,而不是在配置插件時(shí)明文顯示。
基于 Vault 的敏感信息存儲(chǔ)
第一步:在 Vault 中創(chuàng)建對(duì)應(yīng)的配置,可以使用如下命令:
vault kv put apisix/jack auth-key=value
第二步:通過(guò) Admin API 添加 Secret 資源,配置 Vault 的地址等連接信息:
curl http://127.0.0.1:9180/apisix/admin/secrets/vault/1 \\-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d "{ "uri": "https://127.0.0.1:8200", "prefix": "apisix", "token": "root"}"
第三步:在key-auth插件中引用 APISIX Secret 資源,填充配置在 Vault 中的位置:
curl http://127.0.0.1:9180/apisix/admin/consumers \\-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d "{ "username": "jack", "plugins": { "key-auth": { "key": "$secret://vault/1/jack/auth-key" } }}"
通過(guò)以上步驟,可以將key-auth插件中的 key 配置保存在 Vault 中,而不是在配置插件時(shí)明文顯示。
新特性:實(shí)驗(yàn)性基于 gRPC 的 etcd 配置同步
在本次新版本中,我們還引入了實(shí)驗(yàn)性的基于 gRPC 的 etcd 配置同步。當(dāng)前 APISIX 同步 etcd 的配置,是基于 HTTP long pulling,這就要求 etcd 開(kāi)啟 gRPC-gateway (所幸的是默認(rèn)就是開(kāi)啟的)。
在實(shí)踐過(guò)程中,我們遇到了 etcd 的 HTTP API 出現(xiàn)問(wèn)題,也許是因?yàn)橥ㄟ^(guò) HTTP 同步配置并非 etcd 的主流使用方式,所以會(huì)更容易遇到 bug。通過(guò)把 etcd 配置同步由 HTTP long pulling 切換到 gRPC 上面來(lái),APISIX 實(shí)現(xiàn)了同步方式與主流接軌。
另外由于 gRPC 本身提供了多路復(fù)用的支持,改用 gRPC 同步配置能大幅降低 APISIX 到 etcd 的連接數(shù)。當(dāng)前 APISIX 同步每一類配置都要有獨(dú)立的 HTTP 連接,切換到 gRPC 后每個(gè)進(jìn)程只有一條用于配置同步的連接(如果開(kāi)啟了 L4 代理,那么是兩條)。
啟用實(shí)驗(yàn)性的基于 gRPC 的配置同步,需要在配置文件config.yaml中設(shè)置use_grpc: true,如下所示:
etcd: use_grpc: true timeout: 3600 host: - "http://127.0.0.1:2379" prefix: "/apisix"
新特性:基于 Consul 的服務(wù)發(fā)現(xiàn)
在 APISIX 之前的版本里,有熱心的貢獻(xiàn)者提供了基于 Consul KV 的服務(wù)發(fā)現(xiàn)實(shí)現(xiàn)。不過(guò) Consul KV 跟 Consul 自身的服務(wù)發(fā)現(xiàn)功能有些不同,Consul 自身的服務(wù)發(fā)現(xiàn)支持額外的一些功能,比如對(duì)注冊(cè)服務(wù)的健康檢查,所以在使用上會(huì)更為廣泛些。本次 3.1 版本中,另一位熱心貢獻(xiàn)者提供了基于 Consul 的服務(wù)發(fā)現(xiàn),填補(bǔ)了這一空缺。
基于 Consul 的服務(wù)發(fā)現(xiàn)和之前版本里基于 Consul KV 的服務(wù)發(fā)現(xiàn)有著相似的配置。首先,需要在config.yaml文件中啟用該服務(wù)發(fā)現(xiàn):
discovery: consul: servers: - "http://127.0.0.1:8500"
然后在具體的 upstream 中配置對(duì)應(yīng)的service_name和discovery_type:
curl http://127.0.0.1:9180/apisix/admin/upstreams/1 -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -i -d "{ "service_name": "service_a", "discovery_type": "consul"}"
對(duì)應(yīng)的 upstream 在使用過(guò)程中,就會(huì)根據(jù) Consul 里面配置的值去得到真正的上游節(jié)點(diǎn)。
新特性:內(nèi)置的調(diào)試插件
工欲善其事,必先利其器,調(diào)試是程序員日常工作的一部分。作為注重調(diào)試體驗(yàn)的網(wǎng)關(guān),APISIX 在 3.1 版本中以插件的形式內(nèi)置了一個(gè) Lua 調(diào)試器插件,支持動(dòng)態(tài)設(shè)置斷點(diǎn)、添加回調(diào)等等。
默認(rèn)的配置如下:
plugins: ... - inspect ...plugin_attr: inspect: delay: 3 hooks_file: "/usr/local/apisix/plugin_inspect_hooks.lua"
APISIX 在啟動(dòng)后,會(huì)定期查看配置的 hooks_file (這里是 "/usr/local/apisix/plugin_inspect_hooks.lua"),如果文件中有內(nèi)容,就會(huì)根據(jù)里面的內(nèi)容設(shè)置斷點(diǎn)和回調(diào)。比如下方內(nèi)容會(huì)給 limit-req.lua 的 88 行上設(shè)置一個(gè)斷點(diǎn),并在該斷點(diǎn)上注冊(cè)了回調(diào)函數(shù)function(info) ... end。
local dbg = require "apisix.inspect.dbg"dbg.set_hook("limit-req.lua", 88, require("apisix.plugins.limit-req").access, function(info) ngx.log(ngx.INFO, debug.traceback("foo traceback", 3)) return trueend)
新功能:優(yōu)化以及更多小功能
除了上面提到的幾個(gè)大的功能外,此次發(fā)布也包含許多值得述說(shuō)的改動(dòng),比如:
優(yōu)化 Prometheus 指標(biāo)采集的資源占用
支持在 L4 的代理中,配置域名作為上游 如果你對(duì)新版本的完整更新細(xì)節(jié)感興趣,請(qǐng)參考 3.1.0 發(fā)布的 changelog:https://github.com/apache/apisix/blob/release/3.1/docs/zh/latest/CHANGELOG.md#310
標(biāo)簽: Apache,Apache APISIX,攻略,教程
- Apache APISIX 3.1.0 版本正式發(fā)布 精選
- Firefox 將在2023年1月啟用全新架構(gòu)_每日時(shí)訊
- 微軟 OneDrive iOS 版 13.46.2 更新上線
- 騰訊QQ UOS版更新上線,新增QQ截圖能力等功能
- 當(dāng)前熱議!微信支付分升級(jí)更新:訂單信息一目了然
- 高德地圖上線綠燈導(dǎo)航功能,緩解車主過(guò)燈焦慮-每日熱訊
- 美團(tuán)推出美團(tuán)圈圈探店小程序,試水短視頻探店種草_播資訊
- 天天熱點(diǎn)評(píng)!攜程旅行航司通知,元旦后機(jī)票價(jià)格同比漲4成
- 網(wǎng)易云音樂(lè)推出社交軟件聲域
- 微信鍵盤iOS測(cè)試版1.0.1發(fā)布