Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪(fǎng)問(wèn)控制
業(yè)務(wù)場(chǎng)景
有這么一個(gè)業(yè)務(wù)場(chǎng)景:業(yè)務(wù)平臺(tái)還是通過(guò)Kubernetes進(jìn)行編排對(duì)外提供服務(wù)。然后其后臺(tái)管理部分,出于安全的考慮,只允許特定的IP才能訪(fǎng)問(wèn)。如何實(shí)現(xiàn)?
目前,我們的網(wǎng)絡(luò)架構(gòu)是 SLB + Nginx Ingress + Ingress + Service + Pod的模式。其中,SLB使用的是阿里云的負(fù)載均衡SaaS服務(wù),使用的是7層負(fù)載,支持一個(gè)SLB實(shí)例+多個(gè)域名的轉(zhuǎn)發(fā)模式,如下圖所示。

阿里云SLB可以通過(guò)設(shè)定黑/白名單的方式進(jìn)行訪(fǎng)問(wèn)控制,但是該訪(fǎng)問(wèn)控制會(huì)進(jìn)行”一刀切“:所有通過(guò)該SLB提供服務(wù)的域名要么都可以訪(fǎng)問(wèn),要么都不可以訪(fǎng)問(wèn)。如果domain1和domain2這倆域名可以開(kāi)放訪(fǎng)問(wèn),domain3限定某些特定IP才能訪(fǎng)問(wèn),阿里云SLB的訪(fǎng)問(wèn)控制就無(wú)法滿(mǎn)足我們的需求。
如果要實(shí)現(xiàn)這種業(yè)務(wù)場(chǎng)景,可以通過(guò)在Ingress里配置白名單來(lái)實(shí)現(xiàn)。
配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/server-snippet: |
set_real_ip_from 100.64.0.0/10; # 100.64.0.0/10是阿里云負(fù)載均衡網(wǎng)段 https://help.aliyun.com/document_detail/54007.html
set_real_ip_from 192.168.0.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
nginx.ingress.kubernetes.io/whitelist-source-range: {allow_access_ip1},{allow_access_ip2}
name: {your_application-ingress}
namespace: {your_ns}
spec:
rules:
- host: {your_host}
http:
paths:
- backend:
service:
name: {your_application-service}
port:
number: 80
path: /
pathType: Prefix說(shuō)明:
- nginx.ingress.kubernetes.io/server-snippet: 等同于在nginx的server配置塊中添加自定義配置;
- nginx.ingress.kubernetes.io/whitelist-source-range: 允許訪(fǎng)問(wèn)的客戶(hù)端IP源,多個(gè)IP可用逗號(hào)隔開(kāi),支持CIDR格式,如:192.168.0.0/24, 172.31.0.1;
- set_real_ip_from : 是指接受從哪個(gè)信任前代理處獲得真實(shí)用戶(hù)ip, 可以寫(xiě)多行,如100.64.0.0/10, 192.168.0.0/24
- real_ip_header : 是指從接收到報(bào)文的哪個(gè)http首部去獲取前代理傳送的用戶(hù)ip, 一般是從header的X-Forwarded-For字段獲取IP(remote_addr只是代理上一層的地址,不一定是原始的用戶(hù)ip)
- real_ip_recursive :
- 為on時(shí) , 遞歸排除IP地址:對(duì)從real_ip_header里獲得的IP串,從右往左, 依次過(guò)濾掉來(lái)自set_real_ip_from的IP,剩下的第一個(gè)就默認(rèn)是用戶(hù)的IP了。
- 為off時(shí),對(duì)從real_ip_header里獲取的IP串,當(dāng)最右邊一個(gè)IP是信任的IP(即在set_real_ip_from里有設(shè)置),即認(rèn)為其右邊的第二個(gè)IP就是用戶(hù)的真實(shí)IP。
舉例, 假設(shè):
- real_ip_header里獲得的IP串是1.1.1.1, 2.2.2.2, 192.168.0.100
- set_real_ip_from = 192.168.0.0/24,2.2.2.2
- real_ip_recursive = on時(shí),用戶(hù)IP=1.1.1.1
- real_ip_recursive = off時(shí),用戶(hù)IP=2.2.2.2
通過(guò)以上設(shè)置,就可以在同一個(gè)SLB實(shí)例下,實(shí)現(xiàn)域名級(jí)別的訪(fǎng)問(wèn)控制,比較適合后臺(tái)管理類(lèi)網(wǎng)站部署的訪(fǎng)問(wèn)控制。
以上就是Kubernetes Ingress實(shí)現(xiàn)細(xì)粒度IP訪(fǎng)問(wèn)控制的詳細(xì)內(nèi)容,更多關(guān)于Kubernetes Ingress IP訪(fǎng)問(wèn)控制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Kubernetes?權(quán)限管理認(rèn)證鑒權(quán)詳解
這篇文章主要為大家介紹了Kubernetes?權(quán)限管理認(rèn)證鑒權(quán)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
k8s?Service?實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡
這篇文章主要為大家介紹了k8s?Service?實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡的工作原理及使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Centos?8.2?升級(jí)內(nèi)核通過(guò)elrepo源的方法
這篇文章主要介紹了Centos?8.2?升級(jí)內(nèi)核通過(guò)elrepo源,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
不同k8s集群間服務(wù)如何相互訪(fǎng)問(wèn)實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了不同k8s集群間服務(wù)如何相互訪(fǎng)問(wèn)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

