国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第13關(guān) 解決K8s中Ingress Nginx控制器無(wú)法獲取真實(shí)客戶(hù)端IP的問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了第13關(guān) 解決K8s中Ingress Nginx控制器無(wú)法獲取真實(shí)客戶(hù)端IP的問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

------> 課程視頻同步分享在今日頭條和B站

大家好,我是博哥愛(ài)運(yùn)維。

這節(jié)課帶大家探索并分享最全面的解決在使用Kubernetes(K8s)和Ingress-Nginx-Controller中無(wú)法獲取客戶(hù)端真實(shí)IP問(wèn)題的視頻教程,幫助你快速理解并解決這一問(wèn)題。

如果我們按下面網(wǎng)絡(luò)架構(gòu)圖,暴露我們服務(wù)到公網(wǎng)上提供訪問(wèn),那么此時(shí)我們后端的業(yè)務(wù)服務(wù)POD獲取真實(shí)IP是沒(méi)什么問(wèn)題的,但種形式的網(wǎng)絡(luò)架構(gòu)直接暴露出我們?cè)凑镜墓W(wǎng)IP信息到互聯(lián)網(wǎng)上,無(wú)疑于是在公網(wǎng)上裸奔,一旦遭受攻擊,對(duì)我們的業(yè)務(wù)服務(wù)將是毀滅性的打擊。

k8s ingress 創(chuàng)建出來(lái)沒(méi)有ip,2023年Kubernetes實(shí)戰(zhàn)攻略,kubernetes,nginx,tcp/ip,運(yùn)維開(kāi)發(fā),k8s,云原生,容器

那么我們會(huì)去尋求一些大型提供公網(wǎng)網(wǎng)絡(luò)防護(hù)的企業(yè)的幫助,購(gòu)買(mǎi)他們的安全服務(wù),如動(dòng)態(tài)加速線(xiàn)路、WAF、或者高防線(xiàn)路,這個(gè)時(shí)候,我們的業(yè)務(wù)在公網(wǎng)上提供由于可以相對(duì)更安全了,但此時(shí)會(huì)帶來(lái)另外一個(gè)問(wèn)題,就是我們后端服務(wù)獲取的客戶(hù)端IP,都是安全服務(wù)提供商的代理IP了。

k8s ingress 創(chuàng)建出來(lái)沒(méi)有ip,2023年Kubernetes實(shí)戰(zhàn)攻略,kubernetes,nginx,tcp/ip,運(yùn)維開(kāi)發(fā),k8s,云原生,容器

那么我們?cè)趺唇鉀Q這個(gè)問(wèn)題,獲取到真實(shí)CLIENT客戶(hù)端的IP地址呢,在ingress-nginx控制器上配置其實(shí)也不難,加入下面三行配置即可解決:

# kubectl -n kube-system edit configmaps nginx-configuration

apiVersion: v1
data:
  ......
  compute-full-forwarded-for: "true"
  forwarded-for-header: "X-Forwarded-For"
  use-forwarded-headers: "true"

我們來(lái)看看這三行配置的詳細(xì)含義:

compute-full-forwarded-for
: 將 remote address 附加到 X-Forwarded-For Header而不是替換它。當(dāng)啟用此選項(xiàng)后端應(yīng)用程序負(fù)責(zé)根據(jù)自己的受信任代理列表排除并提取客戶(hù)端 IP。

forwarded-for-header
: 設(shè)置用于標(biāo)識(shí)客戶(hù)端的原始 IP 地址的 Header 字段。默認(rèn)值X-Forwarded-For
,此處由于A10帶入的是自定義記錄IP的Header,所以此處填入是X_FORWARDED_FOR

use-forwarded-headers
: 如果設(shè)置為T(mén)rue時(shí),則將設(shè)定的X-Forwarded-*
 Header傳遞給后端, 當(dāng)Ingress在L7 代理/負(fù)載均衡器
之后使用此選項(xiàng)。如果設(shè)置為 false 時(shí),則會(huì)忽略傳入的X-Forwarded-*
Header, 當(dāng) Ingress 直接暴露在互聯(lián)網(wǎng)或者 L3/數(shù)據(jù)包的負(fù)載均衡器后面,并且不會(huì)更改數(shù)據(jù)包中的源 IP請(qǐng)使用此選項(xiàng)。

OK,到這里,大家是不是以為萬(wàn)事大吉了,NONONO,這個(gè)時(shí)候,其實(shí)還存在一個(gè)安全隱患是我們必須要提前知道的。

我們先來(lái)準(zhǔn)備部署一個(gè)測(cè)試服務(wù),用來(lái)模擬后端服務(wù)POD,并且能獲取ingress-nginx傳回來(lái)的請(qǐng)求頭部信息打印出來(lái),以便我們更直觀的觀察測(cè)試的詳細(xì)情況

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
  namespace: default
  labels:
    app: whoami
spec:
  replicas: 1
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
      - image: traefik/whoami:v1.10
        imagePullPolicy: Always
        name: whoami
        ports:
        - containerPort: 80
          name: 80tcp02
          protocol: TCP
      dnsPolicy: ClusterFirst
      restartPolicy: Always

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: whoami
  name: whoami
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: whoami
  sessionAffinity: None
  type: ClusterIP

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.1.201/32  # 只允許信任IP訪問(wèn),其他返回403
    nginx.ingress.kubernetes.io/configuration-snippet: |  # 加入自定義頭部,保存remote_addr信息
      proxy_set_header X-Custom-Real-IP $remote_addr;
  name: whoami
spec:
  rules:
  - host: whoami.boge.com
    http:
      paths:
      - backend:
          service:
            name: whoami
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - whoami.boge.com
    secretName: boge-com-tls

上面可以看到,我們對(duì)于whoami加入了訪問(wèn)限制,只允許出口IP為10.0.1.201這個(gè)地址來(lái)訪問(wèn),其他全部拒絕返回403

curl -H "Host: whoami.boge.com" -s http://10.0.1.201

在201這臺(tái)節(jié)點(diǎn)上請(qǐng)求是正常的

root@node-1:~# curl -H "Host: whoami.boge.com" -s http://10.0.1.201
Hostname: whoami-6cf6989d4c-7hrxz
IP: 127.0.0.1
IP: ::1
IP: 172.20.217.124
IP: fe80::383a:48ff:fe1e:e1e5
RemoteAddr: 172.20.84.128:5110
GET / HTTP/1.1
Host: whoami.boge.com
User-Agent: curl/7.81.0
Accept: */*
X-Custom-Real-Ip: 10.0.1.201
X-Forwarded-For: 10.0.1.201
X-Forwarded-Host: whoami.boge.com
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Scheme: http
X-Real-Ip: 10.0.1.201
X-Request-Id: 5b90653f94b45c1fa20ab038ff294534
X-Scheme: http

我們來(lái)到202這臺(tái)節(jié)點(diǎn)請(qǐng)求看看,正常是會(huì)返回403拒絕請(qǐng)求的

root@node-2:~# curl -H "Host: whoami.boge.com" -s http://10.0.1.201
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

但這個(gè)時(shí)候,我們?cè)谡?qǐng)求頭部傳入偽造的XFF信息,再看結(jié)果呢

curl -H "X-Forwarded-For: 10.0.1.201" " -H "Host: whoami.boge.com" -s http://10.0.1.201

這里我們可以看到我們通過(guò)偽造XFF,成功繞過(guò)了服務(wù)的安全訪問(wèn)限制。

root@node-2:~# curl -H "X-Forwarded-For: 10.0.1.201" -H "boge: test" -H "Host: whoami.boge.com" -s http://10.0.1.201
Hostname: whoami-6cf6989d4c-7hrxz
IP: 127.0.0.1
IP: ::1
IP: 172.20.217.124
IP: fe80::383a:48ff:fe1e:e1e5
RemoteAddr: 172.20.84.128:5110
GET / HTTP/1.1
Host: whoami.boge.com
User-Agent: curl/7.81.0
Accept: */*
Boge: test
X-Custom-Real-Ip: 10.0.1.201
X-Forwarded-For: 10.0.1.201, 10.0.1.202
X-Forwarded-Host: whoami.boge.com
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Scheme: http
X-Original-Forwarded-For: 10.0.1.201
X-Real-Ip: 10.0.1.201
X-Request-Id: 81ce680afd34390c7936b72ac0e5c105
X-Scheme: http

解決這個(gè)也不復(fù)雜,就是我們就對(duì)請(qǐng)求到ingress-nginx控制器的來(lái)源IP作信任加白處理,只允許信任的IP段傳來(lái)的XFF等信息。

但要注意的是,對(duì)于提供安全的廠商來(lái)說(shuō),他們的出口IP信息會(huì)經(jīng)常變化的,意味著一旦變化,那么獲取客戶(hù)端真實(shí)IP又會(huì)存在問(wèn)題。我們?cè)诩舆@個(gè)信任配置的時(shí)候,需要根據(jù)實(shí)際情況來(lái)作考量要不要添加,其實(shí)只要我們不暴露限制的IP信息,通常情況下還是相對(duì)安全的

proxy-real-ip-cidr: 10.0.1.201/32,10.0.1.203/32

加了信任IP配置后,再請(qǐng)求就沒(méi)有安全問(wèn)題了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-771181.html

root@node-2:~# curl -H "X-Forwarded-For: 10.0.1.201" -H "boge: test" -H "Host: whoami.boge.com" -s http://10.0.1.201
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

到了這里,關(guān)于第13關(guān) 解決K8s中Ingress Nginx控制器無(wú)法獲取真實(shí)客戶(hù)端IP的問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 18-k8s控制器資源-cronjob控制器

    18-k8s控制器資源-cronjob控制器

    ? ? ? ? job控制器是執(zhí)行完一次任務(wù),就結(jié)束; ? ? ? ? cronjob控制器,是基于job控制器,定期頻率性執(zhí)行任務(wù);等同于linux系統(tǒng)中的crontab一樣; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata: ? name: xinjizhiwa spec: ? schedule: \\\"* * * * *\\\" ? #定義job的模板 ? jobTemplate

    2024年02月22日
    瀏覽(112)
  • k8s 控制器

    Kubernetes(K8S)是一種開(kāi)源的容器編排平臺(tái),它可以自動(dòng)化地管理容器化應(yīng)用程序的部署、擴(kuò)展和運(yùn)行。K8S中的控制器是一種重要的組件,它可以確保應(yīng)用程序的狀態(tài)與期望的狀態(tài)一致。在K8S中,有五種常見(jiàn)的控制器,它們分別是: 1. ReplicaSet控制器 ReplicaSet控制器用于確保P

    2024年02月13日
    瀏覽(22)
  • K8s控制器

    K8s控制器

    kubectl create tabtab 下面的所有都可以創(chuàng)建模板文件 --dry-run=client -o yaml 查詢(xún)資源對(duì)象的幫助信息 ????????kubectl explain pod.spec.restartPolicy? ? ? ? ? ? #這里對(duì)上下層級(jí)關(guān)系需要清楚 獲取Pod模板 ????????kubectl run mypod --image=xxxx --dry-run=client -o yaml 獲取Deployment ????????ku

    2024年02月03日
    瀏覽(52)
  • 15-k8s控制器資源-deployment/部署控制器

    15-k8s控制器資源-deployment/部署控制器

    ? ? ? ? 在學(xué)習(xí)rc和rs控制器資源時(shí),我們指導(dǎo),這兩個(gè)資源都是控制pod的副本數(shù)量的,但是,他們兩個(gè)有個(gè)缺點(diǎn),就是在部署新版本pod或者回滾代碼的時(shí)候,需要先apply資源清單,然后再刪除現(xiàn)有pod,通過(guò)資源控制,重新拉取新的pod來(lái)實(shí)現(xiàn)回滾或者迭代升級(jí); ? ? ? ? 那么

    2024年02月21日
    瀏覽(29)
  • 14-k8s控制器資源-rs控制器replicasets

    14-k8s控制器資源-rs控制器replicasets

    ? ? ? ? replicaset副本控制器,簡(jiǎn)稱(chēng):rs控制器; ? ? ? ? 用法:與rc控制器“幾乎”相同; ? ? ? ? 能力:可以指定pod的副本始終存活,相比于rc控制器;支持標(biāo)簽匹配,也支持標(biāo)簽表達(dá)式 ????????注意:不論是rc還是rs資源,都是通過(guò)“標(biāo)簽”驚醒匹配pod的,如果有同樣

    2024年02月21日
    瀏覽(35)
  • k8s---pod控制器

    k8s---pod控制器

    工作負(fù)載,workload用于管理pod的中間層,確保pod資源符合預(yù)期的狀態(tài)。 預(yù)期狀態(tài): 1、副本數(shù) 2、容器重啟策略 3、鏡像拉取策略 pod出故障的出去等等 1、replicaset:指定pod副本的數(shù)量 三個(gè)組件: ????????????????1、pod的副本 ????????????????2、標(biāo)簽選擇器,判斷

    2024年01月18日
    瀏覽(25)
  • 17-k8s控制器資源-job控制

    17-k8s控制器資源-job控制

    job控制器:就是一次性任務(wù)的pod控制器,pod完成作業(yè)后不會(huì)重啟,其重啟策略是:Never ? ? ? ? 啟動(dòng)一個(gè)pod,執(zhí)行完成一個(gè)事件,然后pod關(guān)閉; ? ? ? ? 事件:計(jì)算π的值,取前5000位; [root@k8s231 pi]# vim job.yaml apiVersion: batch/v1 kind: Job metadata: ? name: job-pi spec: ? #定義pod模板 ?

    2024年02月20日
    瀏覽(23)
  • 帶你深入學(xué)習(xí)k8s--(四) 控制器(k8s核心)

    帶你深入學(xué)習(xí)k8s--(四) 控制器(k8s核心)

    目錄 一、概念 1、什么是控制器 2、控制器執(zhí)行流程 3、控制器類(lèi)型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滾? 3、修改滾動(dòng)更新策略 4、暫停與恢復(fù) 3、daemonset 4、job 5、cronjob 前言: 上一章我們說(shuō)到,pod有兩種,分別為自主式 Pod,Pod 退出后不會(huì)被創(chuàng)建;

    2024年02月06日
    瀏覽(35)
  • k8s 的 Deployment控制器

    k8s 的 Deployment控制器

    RC(Replication Controller)主要作用就是用來(lái)確保容器應(yīng)用的副本數(shù)始終保持在用戶(hù)定義的副本數(shù)。即如果有容器異常退出,會(huì)自動(dòng)創(chuàng)建新的pod來(lái)替代;而如果異常多出來(lái)的容器也會(huì)自動(dòng)回收。 K8S官方建議使用RS(ReplicaSet)替代RC(Replication Controller)進(jìn)行部署,RS跟RC沒(méi)有本質(zhì)的

    2024年02月09日
    瀏覽(25)
  • K8s(五)ReplicaSet控制器

    K8s(五)ReplicaSet控制器

    在Kubernetes(簡(jiǎn)稱(chēng)K8s)中,控制器是負(fù)責(zé)管理和維護(hù)集群中資源狀態(tài)的組件。控制器監(jiān)視集群中的對(duì)象,并根據(jù)它們的預(yù)期狀態(tài)來(lái)采取行動(dòng),以確保系統(tǒng)的期望狀態(tài)與實(shí)際狀態(tài)保持一致。 對(duì)于自主式pod來(lái)說(shuō),刪除pod之后pod就直接消失了,如果因?yàn)橐恍┱`操作或pod錯(cuò)誤退出,就

    2024年01月21日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包