隨著現(xiàn)代應(yīng)用程序的復(fù)雜性增加以及用戶對(duì)安全性的需求提高,許多企業(yè)正在轉(zhuǎn)向使用 HTTPS(SSL/TLS)來(lái)保護(hù)其網(wǎng)絡(luò)流量,Ingress 控制器正是為了滿足這一需求而設(shè)計(jì)的,它負(fù)責(zé)管理集群中的所有外部路由,并確保流量通過(guò)適當(dāng)?shù)亩它c(diǎn)進(jìn)行傳輸。
我們將探討如何在 Kubernetes 中配置 Ingress 以使用 SSL/TLS 證書(shū),從而實(shí)現(xiàn)安全可靠的訪問(wèn)控制。
什么是 Ingress?
Ingress 是 Kubernetes 中的一個(gè)控制器組件,它的主要職責(zé)是在多個(gè)后端服務(wù)之間提供統(tǒng)一的入口點(diǎn),這意味著無(wú)論您有多少后端服務(wù)或服務(wù)組,只要它們都在同一個(gè)命名空間內(nèi),都可以通過(guò) Ingress 進(jìn)行統(tǒng)一的訪問(wèn),Ingress 可以支持多種協(xié)議和路徑規(guī)則,包括 HTTP、HTTPS 和自定義協(xié)議等。
安裝 Ingress 控制器
要開(kāi)始使用 Ingress,請(qǐng)首先安裝一個(gè) Ingress 控制器,在 Kubernetes v1.20 版本及更高版本中,默認(rèn)情況下已經(jīng)包含 Ingress Controller,您可以使用以下命令手動(dòng)安裝 Ingress Controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.0/deploy/static/provider/cloud/deployment.yaml
這將從 GitHub 上獲取 Ingress Nginx 控制器的部署 YAML 文件并應(yīng)用到您的 Kubernetes 集群中。
創(chuàng)建 Ingress 規(guī)則
一旦 Ingress 控制器安裝完畢,下一步就是創(chuàng)建相應(yīng)的 Ingress 規(guī)則以配置 SSL/TLS 證書(shū),這些規(guī)則定義了哪些服務(wù)應(yīng)通過(guò) Ingress 訪問(wèn),以及如何處理請(qǐng)求。
假設(shè)我們有一個(gè)名為myapp
的后端服務(wù),位于service/myapp
命名空間中,我們需要?jiǎng)?chuàng)建一個(gè) Ingress 規(guī)則來(lái)監(jiān)聽(tīng) HTTPS 端口 443 并轉(zhuǎn)發(fā)到該服務(wù),以下是創(chuàng)建這個(gè) Ingress 規(guī)則的基本步驟:
1、創(chuàng)建一個(gè)自簽名的 SSL/TLS 證書(shū):
如果您還沒(méi)有 SSL/TLS 證書(shū),可以使用cert-manager
來(lái)生成自簽名證書(shū),運(yùn)行以下命令啟動(dòng)cert-manager
服務(wù)器:
cert-manager create clusterissuer --usage=letsencrypt-prod --dns-nameservers="8.8.8.8" "8.8.4.4" --secret-name=my-issuer-secret
使用openssl
或其他工具生成您的自簽名證書(shū):
openssl req -newkey rsa:4096 -nodes -sha256 -keyout mycert.key -x509 -days 365 -out mycert.crt
2、創(chuàng)建 Ingress 規(guī)則:
使用 kubectl 命令創(chuàng)建 Ingress 規(guī)則,如果您的后端服務(wù)名為myapp
,并且您想讓所有請(qǐng)求都經(jīng)過(guò) SSL 加密,可以在default
命名空間中執(zhí)行以下命令:
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-ingress namespace: default spec: tls: - hosts: - example.com secretName: my-cert-secret rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: myapp port: number: 80 EOF
在這個(gè)例子中,我們指定了一個(gè)名為example.com
的主機(jī),并且使用了一個(gè)名為my-cert-secret
的 TLS 證書(shū),我們還定義了一條路徑規(guī)則,指定所有根路徑 (/
) 應(yīng)被轉(zhuǎn)發(fā)到myapp
服務(wù)。
驗(yàn)證 Ingress 配置
最后一步是驗(yàn)證您的 Ingress 配置是否正確,您可以通過(guò)以下命令查看 Ingress 對(duì)象的狀態(tài):
kubectl get ingress myapp-ingress -n default
這將顯示您的 Ingress 規(guī)則及其狀態(tài)信息。
在 Kubernetes 中配置 Ingress 以使用 SSL/TLS 證書(shū)是一個(gè)相對(duì)簡(jiǎn)單的過(guò)程,只需按照上述步驟操作即可輕松地為您的后端服務(wù)設(shè)置統(tǒng)一的安全訪問(wèn)入口,通過(guò)這種方式,您可以確保所有流量均通過(guò)加密連接進(jìn)行傳輸,從而保障數(shù)據(jù)安全性并防止中間人攻擊。
利用 Ingress 控制器結(jié)合合適的 SSL/TLS 證書(shū),您不僅可以簡(jiǎn)化前端代碼,還能增強(qiáng)系統(tǒng)的整體安全性,通過(guò)遵循以上步驟,您可以高效地管理和擴(kuò)展您的 Kubernetes 集群中的 Ingress 設(shè)置。