kubernetes——外界訪問(wèn)Service三種方式

NodePort

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort ??
  ports:
  - nodePort: 8080 ??
    targetPort: 80
    protocol: TCP
    name: http
  - nodePort: 443
    protocol: TCP
    name: https
  selector:
    run: my-nginx

原理:在每一臺(tái)宿主機(jī)上添加一條iptables規(guī)則

-A KUBE-NODEPORTS -p tcp -m comment --comment "default/my-nginx: nodePort" -m tcp --dport 8080 -j KUBE-SVC-67RL4FN6JRUPOJYM

在NodePort模式下,會(huì)多一次SNAT轉(zhuǎn)換,給即將離開這臺(tái)主機(jī)的 IP 包,進(jìn)行了一次 SNAT 操作,將這個(gè) IP 包的源地址替換成了這臺(tái)宿主機(jī)上的 CNI 網(wǎng)橋地址,或者宿主機(jī)本身的 IP 地址(如果 CNI 網(wǎng)橋不存在的話)。

目的:

           client
             \ ^
              \ \
               v \
   node 1 <--- node 2
    | ^   SNAT
    | |   --->
    v |
 endpoint
 
 如果沒(méi)有做 SNAT 操作的話,這時(shí)候,被轉(zhuǎn)發(fā)來(lái)的 IP 包的源地址就是 client 的 IP 地址。所以此時(shí),Pod 就會(huì)直接將回復(fù)發(fā)給client。對(duì)于 client 來(lái)說(shuō),它的請(qǐng)求明明發(fā)給了 node 2,收到的回復(fù)卻來(lái)自 node 1,這個(gè) client 很可能會(huì)報(bào)錯(cuò)。

LoadBalancer

kind: Service
apiVersion: v1
metadata:
  name: example-service
spec:
  ports:
  - port: 8765
    targetPort: 9376
  selector:
    app: example
  type: LoadBalancer

ExternalName

---
kind: Service
apiVersion: v1
metadata:
  name: example-service
spec:
  ports:
  - port: 8765
    targetPort: 9376
  selector:
    app: example
  type: LoadBalancer

附:iptables 鏈名關(guān)系

  1. KUBE-SERVICES 或者 KUBE-NODEPORTS 規(guī)則對(duì)應(yīng)的 Service 的入口鏈,這個(gè)規(guī)則應(yīng)該與 VIP 和 Service 端口一一對(duì)應(yīng);
  2. KUBE-SEP-(hash) 規(guī)則對(duì)應(yīng)的 DNAT 鏈,這些規(guī)則應(yīng)該與 Endpoints 一一對(duì)應(yīng);
    3.KUBE-SVC-(hash) 規(guī)則對(duì)應(yīng)的負(fù)載均衡鏈,這些規(guī)則的數(shù)目應(yīng)該與 Endpoints 數(shù)目一致;
  3. 如果是 NodePort 模式的話,還有 POSTROUTING 處的 SNAT 鏈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 容器技術(shù)概念入門篇 從進(jìn)程說(shuō)開去 容器本身沒(méi)有價(jià)值,有價(jià)值的是“容器編排”。 容器其實(shí)是一種沙盒技術(shù)。顧名思義,沙...
    白板時(shí)鐘閱讀 2,798評(píng)論 0 2
  • 前言 Pod 已經(jīng)成功運(yùn)行起來(lái)了,但是有兩個(gè)問(wèn)題。 一是這些 Pod 無(wú)法從集群外部直接訪問(wèn)到,二是 Pod 出現(xiàn)...
    左程立閱讀 323評(píng)論 0 0
  • Service 概念介紹 雖然每個(gè)Pod都會(huì)被分配一個(gè)單獨(dú)的IP地址,但這個(gè)IP地址會(huì)隨著Pod的銷毀而消失。引出...
    jaymz明閱讀 836評(píng)論 0 3
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒(méi)有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,502評(píng)論 0 13
  • 夜鶯2517閱讀 128,214評(píng)論 1 9

友情鏈接更多精彩內(nèi)容