Kubernetes Gateway API TLS路由使用及說(shuō)明
什么是 TLSRoute?
TLSRoute 是 Gateway API 中的一個(gè)資源類(lèi)型,專(zhuān)門(mén)用于處理 TLS 流量。它可以根據(jù)主機(jī)名等 TLS 元數(shù)據(jù),將流量定向到不同的 Kubernetes 后端服務(wù)。
Gateway 配置:TLS 流量的入口
要使用 TLSRoute,首先需要配置 Gateway 作為流量入口點(diǎn)。以下是一個(gè)同時(shí)支持兩種 TLS 處理模式的 Gateway 配置示例:
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: Gateway # 資源類(lèi)型
metadata:
name: example-gateway # Gateway名稱(chēng)
spec:
gatewayClassName: example-gateway-class # Gateway控制器類(lèi)型
listeners:
- name: tls # 監(jiān)聽(tīng)器名稱(chēng),用于TLSRoute引用
protocol: TLS # 協(xié)議類(lèi)型
port: 443 # 監(jiān)聽(tīng)端口
tls:
mode: Passthrough # TLS處理模式:透?jìng)?
- name: tls-terminate # 監(jiān)聽(tīng)器名稱(chēng),用于TLSRoute引用
protocol: TLS # 協(xié)議類(lèi)型
port: 8443 # 監(jiān)聽(tīng)端口
tls:
mode: Terminate # TLS處理模式:終止
certificateRefs:
- name: tls-terminate-certificate # 證書(shū)名稱(chēng)
在這個(gè)配置中,我們定義了兩個(gè)監(jiān)聽(tīng)器:
- 443 端口:使用 Passthrough 模式,直接透?jìng)?TLS 流量
- 8443 端口:使用 Terminate 模式,在 Gateway 層面終止 TLS 連接
TLSRoute 配置:精細(xì)化的流量路由
透?jìng)髂J剑≒assthrough)
當(dāng)我們需要后端服務(wù)直接處理 TLS 連接時(shí),可以使用透?jìng)髂J剑?/p>
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: TLSRoute # 資源類(lèi)型
metadata:
name: foo-route # TLSRoute名稱(chēng)
spec:
parentRefs:
- name: example-gateway # 引用的Gateway名稱(chēng)
sectionName: tls # 引用的監(jiān)聽(tīng)器名稱(chēng)
hostnames:
- "foo.example.com" # 匹配的主機(jī)名
rules:
- backendRefs:
- name: foo-svc # 后端服務(wù)名稱(chēng)
port: 443 # 后端服務(wù)端口
這個(gè)配置會(huì)將 foo.example.com 的流量通過(guò) 443 端口的透?jìng)鞅O(jiān)聽(tīng)器,直接轉(zhuǎn)發(fā)到 foo-svc 服務(wù)的 443 端口。
終止模式(Terminate)
當(dāng)我們希望在 Gateway 層面集中管理 TLS 證書(shū)時(shí),可以使用終止模式:
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: TLSRoute # 資源類(lèi)型
metadata:
name: bar-route # TLSRoute名稱(chēng)
spec:
parentRefs:
- name: example-gateway # 引用的Gateway名稱(chēng)
sectionName: tls-terminate # 引用的監(jiān)聽(tīng)器名稱(chēng)
hostnames:
- "bar.example.com" # 匹配的主機(jī)名
rules:
- backendRefs:
- name: bar-svc # 后端服務(wù)名稱(chēng)
port: 8080 # 后端服務(wù)端口
這個(gè)配置會(huì)將 bar.example.com 的流量通過(guò) 8443 端口的終止監(jiān)聽(tīng)器,在 Gateway 層面終止 TLS 連接后,轉(zhuǎn)發(fā)到 bar-svc 服務(wù)的 8080 端口。
兩種 TLS 模式的對(duì)比
透?jìng)髂J剑≒assthrough)
工作原理:Gateway 將加密的 TCP 流直接傳遞給后端服務(wù),由后端服務(wù)負(fù)責(zé) TLS 終止。
適用場(chǎng)景:
- 后端服務(wù)需要直接處理 TLS 連接
- 后端服務(wù)需要訪問(wèn)客戶(hù)端證書(shū)信息
- 實(shí)現(xiàn)端到端加密
配置特點(diǎn):不需要在 Gateway 上配置證書(shū),簡(jiǎn)化了 Gateway 配置。
終止模式(Terminate)
工作原理:Gateway 首先使用指定的證書(shū)終止 TLS 流,然后將未加密的 TCP 流傳遞給后端服務(wù)。
適用場(chǎng)景:
- 集中管理 TLS 證書(shū),減少證書(shū)維護(hù)成本
- 減少后端服務(wù)的 TLS 處理開(kāi)銷(xiāo)
- 需要在 Gateway 層進(jìn)行流量檢查或修改
配置特點(diǎn):需要在 Gateway 上配置 certificateRefs 指定證書(shū)。
生產(chǎn)環(huán)境推薦配置
Gateway 生產(chǎn)環(huán)境配置
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: Gateway # 資源類(lèi)型
metadata:
name: production-gateway # Gateway名稱(chēng)
namespace: ingress # 建議使用單獨(dú)的命名空間
spec:
gatewayClassName: production-gateway-class # 生產(chǎn)環(huán)境專(zhuān)用Gateway控制器
listeners:
- name: https # 監(jiān)聽(tīng)器名稱(chēng)
protocol: TLS # 協(xié)議類(lèi)型
port: 443 # 標(biāo)準(zhǔn)HTTPS端口
tls:
mode: Terminate # 生產(chǎn)環(huán)境推薦使用終止模式
certificateRefs:
- name: production-tls # 生產(chǎn)環(huán)境證書(shū)
kind: Secret # 證書(shū)存儲(chǔ)類(lèi)型
group: core # API組
- name: tls-passthrough # 透?jìng)髂J奖O(jiān)聽(tīng)器
protocol: TLS # 協(xié)議類(lèi)型
port: 8443 # 透?jìng)髂J蕉丝?
tls:
mode: Passthrough # 透?jìng)髂J?
TLSRoute 生產(chǎn)環(huán)境配置
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: TLSRoute # 資源類(lèi)型
metadata:
name: production-app-route # TLSRoute名稱(chēng)
namespace: app-namespace # 應(yīng)用命名空間
spec:
parentRefs:
- name: production-gateway # 引用生產(chǎn)環(huán)境Gateway
namespace: ingress # Gateway所在命名空間
sectionName: https # 引用終止模式監(jiān)聽(tīng)器
hostnames:
- "app.example.com" # 生產(chǎn)環(huán)境域名
rules:
- backendRefs:
- name: app-service # 后端服務(wù)名稱(chēng)
port: 8080 # 后端服務(wù)端口
weight: 100 # 流量權(quán)重
常見(jiàn)問(wèn)題及解決方案
- 路由不生效:檢查 TLSRoute 的
parentRefs是否正確引用了 Gateway 和監(jiān)聽(tīng)器 - TLS 握手失敗:檢查證書(shū)配置是否正確,特別是在 Terminate 模式下
- 后端服務(wù)不可達(dá):檢查網(wǎng)絡(luò)連接和后端服務(wù)狀態(tài)
- 主機(jī)名匹配失敗:確保 TLSRoute 中的
hostnames配置與實(shí)際請(qǐng)求的主機(jī)名匹配
總結(jié)
TLSRoute 為 Kubernetes 集群中的 TLS 流量管理提供了強(qiáng)大而靈活的解決方案。通過(guò)選擇合適的 TLS 處理模式,我們可以根據(jù)實(shí)際需求構(gòu)建安全、高效的服務(wù)暴露架構(gòu)。
無(wú)論是需要端到端加密的場(chǎng)景,還是希望集中管理證書(shū)的場(chǎng)景,TLSRoute 都能滿(mǎn)足我們的需求,幫助我們構(gòu)建更加可靠的 Kubernetes 網(wǎng)絡(luò)架構(gòu)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在?k8s?中部署Jenkins的實(shí)踐指南(最新推薦)
本文介紹了在Kubernetes(K8s)中部署Jenkins的方法和步驟,包括準(zhǔn)備K8s集群、選擇Jenkins鏡像、創(chuàng)建存儲(chǔ)資源、賬號(hào)授權(quán)、部署Jenkins、創(chuàng)建Service以及訪問(wèn)測(cè)試,Jenkins在K8s中的部署可以實(shí)現(xiàn)動(dòng)態(tài)資源管理、提高可靠性和容錯(cuò)能力、快速響應(yīng)變化和統(tǒng)一環(huán)境等優(yōu)勢(shì)2025-03-03
kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解
這篇文章主要為大家介紹了kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Ubuntu22.04的Kubernetes環(huán)境中加載橋接網(wǎng)絡(luò)模塊方式
在Ubuntu 22.04的Kubernetes環(huán)境中,解決sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables錯(cuò)誤的步驟包括加載br_netfilter模塊、持久化配置、設(shè)置sysctl參數(shù)以及驗(yàn)證配置,同時(shí),確保Kubernetes組件和CNI插件依賴(lài)這些參數(shù),防火墻配置也要同步2026-01-01
Google?Kubernetes?Engine?集群實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了Google?Kubernetes?Engine?集群實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Kubernetes如何限制不同團(tuán)隊(duì)只能訪問(wèn)各自namespace實(shí)現(xiàn)
這篇文章主要為大家介紹了Kubernetes如何限制不同團(tuán)隊(duì)只能訪問(wèn)各自namespace實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
k8s部署并測(cè)試ingress-nginx的詳細(xì)過(guò)程
這篇文章主要介紹了k8s部署并測(cè)試ingress-nginx的詳細(xì)過(guò)程,本文通過(guò)一個(gè)demo示例給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04
kubernetes調(diào)度之NodeSelector使用解讀
本文介紹Kubernetes中兩種簡(jiǎn)單調(diào)度策略:NodeName通過(guò)指定節(jié)點(diǎn)名稱(chēng)強(qiáng)制調(diào)度,跳過(guò)調(diào)度器;NodeSelector基于節(jié)點(diǎn)標(biāo)簽匹配,需為節(jié)點(diǎn)打標(biāo)簽并在Pod定義中配置,兩者均為強(qiáng)制約束機(jī)制2025-08-08

