日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【k8s】K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP、Internal-IP)

發(fā)布時間:2023/12/10 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【k8s】K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP、Internal-IP) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1. 概述
    • 1.1 service種類
  • 2. Node IP
  • 3. Pod IP
  • 4. Service Cluster IP
    • 4.1 Cluster IP原理
  • 5. External IP
  • 參考

關(guān)聯(lián)文章:
《k8s 核心概念 2 service》service 概述
第五章 服務service 一 ( dns、ENDPOINTS) service 作用
第五章 服務service 二

【k8s】Service種類、類型(ClusterIP、NodePort、LoadBalancer、ExternalName) service的幾種類型
K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP) 和service有關(guān)聯(lián)的一些ip概念

1. 概述

通過《k8s 核心概念 2 service》我們知道service 的作用是提供另一種方式去訪問pod,與直接訪問pod相比,此時,service 可以避免pod發(fā)生變化后ip變化的問題。

此外,service存在不同的類型,例如Cluster IP類型僅能在集群內(nèi)部訪問,而External IP類型可以在服務外訪問。不同的類型,會產(chǎn)生不同的ip字段,在不同場景下會有不同的字段出現(xiàn)。

kubernetes里有三張不同的網(wǎng)絡,每種IP地址,就代表一個不同的尋址空間:

  • Node IP:Node節(jié)點的IP地址
  • Pod IP:Pod的IP地址
  • Cluster IP:內(nèi)部或集群內(nèi)訪問Service的IP地址
  • External IP是 為了解決如何從外部訪問 service 服務的問題。

Node IP包含內(nèi)部IP和外部IP2個概念,內(nèi)部IP讓集群節(jié)點互相訪問,外部IP提供了外部訪問功能。

Pod IP提供訪問pod功能,但僅限于集群內(nèi)訪問,不能從外部訪問。但是存在缺點,pod如果掛掉再重啟,IP會變。

Cluster IP是service Cluster IP,是服務中的一種,該類型的服務僅能從內(nèi)部訪問,間接訪問pod。該服務提供了通過標簽管理一組pod,即使Pod IP變化,重啟后,他的標簽不會變,仍受其管理,因此,解決了之前提到的Pod IP會變的問題。并且由于這一組pod通常是完成相同功能的,例如都是通過8080端口提供天氣查詢服務,因此servie可以采用隨機或其他負載均衡策略,轉(zhuǎn)發(fā)至相應的pod。

External IP是 為了解決如何從外部訪問 service 服務的問題。

1.1 service種類

【k8s】Service種類、類型(ClusterIP、NodePort、LoadBalancer、ExternalName) service的幾種類型

2. Node IP

Node IP分內(nèi)部和外部,內(nèi)部IP僅限集群內(nèi)訪問,外部IP可以從外部訪問。

首先,Node IP是kubernetes集群中每個節(jié)點的物理網(wǎng)卡的IP地址(包括虛擬機的網(wǎng)卡),這是一個真實存在的物理網(wǎng)絡,所有屬于這個網(wǎng)絡的服務器之間都能通過這個網(wǎng)絡進行通信,不管他們中是否有部分節(jié)點不屬于這個kebernetes集群。這也表明了Kubenetes集群之外的節(jié)點訪問Kubernetes之內(nèi)的某個節(jié)點或者TCP/IP服務時,必須要通過Node IP進行通信。

內(nèi)部的node IP是指k8s 管理集群內(nèi)的節(jié)點,自然需要給每個節(jié)點分配IP。此時是最最原始的狀態(tài)。這個ip有什么用?很有用,例如像查看某個pod運行在哪個節(jié)點上,例如圖3;有時候需要指定pod安裝至指定的node上,此時,就需要指定node IP。

外部的Node IP通常是指每個節(jié)點在局域網(wǎng)內(nèi)或公開的IP,可以讓不在集群內(nèi)的主機或客戶端可以訪問的IP。


可以把外部Node IP理解成護照,國際通用,而內(nèi)部Node IP理解成身份證,僅限國內(nèi)使用

nodeIP一般不會單獨使用,例如你要訪問Node1的pod1,因為Node1還存在Pod2等很多其他Pod,無法僅通過ip,還得借助其他參數(shù),例如一個端口來映射某個pod,例如在NodePort類型的Service,每個Service都會在Node節(jié)點上開通一個端口,外部可以通過NodeIP:NodePort即可訪問Service里的Pod,和我們訪問服務器部署的項目一樣,IP:端口/項目名

在kubernetes查詢內(nèi)部Node IP:
1.kubectl get nodes
2.kubectl describe node nodeName

顯示出來的Internal-IP字段就是NodeIP



或者直接查詢 kubectl get nodes -o wide:

3. Pod IP

其次,Pod IP是每個Pod的IP地址,它是Docker Engine根據(jù)docker0網(wǎng)橋的IP地址段進行分配的,通常是一個虛擬的二層網(wǎng)絡,前面我們說過,Kubernetes要求位于不同Node上的Pod能夠彼此直接通信,所以Kuberntes里一個Pod里的容器訪問另外一個Pod里的容器,就是通過Pod IP所在的虛擬二層網(wǎng)絡進行通信的,而真實的TCP/IP流量則是通過Node IP所在的物理網(wǎng)卡流出的。

在kubernetes查詢Pod IP:
1.kubectl get pods
2.kubectl describe pod podName

該方法的截圖省略。

或者直接查詢 kubectl get pod -o wide:

其中IP字段指pod的IP,node字段指運行在哪個節(jié)點上,也就是Node IP(這里對應node IP的內(nèi)部IP概念,對應前面提到的Internal-IP字段)

4. Service Cluster IP

Service是Kubernetes最核心的概念,通過創(chuàng)建Service,可以為一組具有相同功能的容器用用提供一個統(tǒng)一的入口地址,并且將請求進行負載分發(fā)到后端的各個容器應用上。

最后,我們說說Service的Cluster IP,翻譯過來是集群IP,它也是一個虛擬的IP,但更像一個“偽造”的IP網(wǎng)絡,原因有一下幾點:

  • Cluster IP僅僅作用于kubernetes Service這個對象,并由Kubernetes管理和分配IP地址(來源于Cluster IP地址池)
  • Cluster IP無法被ping **注意,很重要**,因為沒有一個“實體網(wǎng)絡對象”來響應
  • Cluster IP只能結(jié)合Service Port組成一個具體的通信端口,單獨的Cluster IP不具備TCP/IP通信的基礎(chǔ),并且它們屬于Kubernetes集群這樣一個封閉的空間,集群之外的節(jié)點如果要訪問這個通信端口,則需要做一些額外的工作。
  • 在Kubernetes集群之內(nèi),Node IP網(wǎng),Pod IP網(wǎng)與Cluster IP網(wǎng)之間的通信,采用的是Kubernetes自己設計的一種編程方式的特殊的路由規(guī)則,與我們所熟知的IP路由有很大的不同。

根據(jù)上面的分析和總結(jié),我們基本明白了:Service的Cluster IP屬于Kubernetes集群內(nèi)部的地址,無法在集群外部直接使用這個地址。那么矛盾來了:實際上我們開發(fā)的業(yè)務系統(tǒng)中肯定多少有一部分要提供給Kubernetes集群外部的應用或者用戶來使用的,NodePort是解決上述問題最直接、最有效、最常用的做法,這個主題以后再說。

4.1 Cluster IP原理

Cluster IP是由kube-proxy使用Iptables規(guī)則重新定向到其本地端口,再均衡到后端Pod的。這個地址從我們啟動API的service-cluster-ip-range參數(shù)(舊版本為portal_net參數(shù))指定的地址池中分配,比如–service-cluster-ip-range=10.0.0.0/16。假設這個Service的端口是1234。集群內(nèi)的所有kube-proxy都會注意到這個Service。當proxy發(fā)現(xiàn)一個新的service后,它會在本地節(jié)點打開一個任意端口,建相應的iptables規(guī)則,重定向服務的IP和port到這個新建的端口,開始接受到達這個服務的連接。

當一個客戶端訪問這個service時,這些iptable規(guī)則就開始起作用,客戶端的流量被重定向到kube-proxy為這個service打開的端口上,kube-proxy隨機選擇一個后端pod來服務客戶。這個流程如下圖所示:

5. External IP

External IP是 為了解決如何從外部訪問 service 服務的問題。

外部訪問Service的方式有兩種:

1)通過設置nodePort映射到物理機,同時設置Service的類型為NodePort。

2)通過設置LoadBalancer映射到云服務上提供的LoadBalancer地址。這種用法僅用于公有云服務提供商的云平臺設置Service的場景。對該Service的請求將會通過LoadBalancer轉(zhuǎn)發(fā)到后端Pod上,負載分發(fā)的實現(xiàn)方式則依賴于云服務商提供的LoadBalancer的實現(xiàn)機制。

以NodePort類型的服務:為例:

看看EXTERNAL -IP列。它顯示nodes, 表明服務可通過任何集群節(jié)點的IP地址訪問。PORT (S)列顯示集群IP (8 0) 的內(nèi)部端口和節(jié)點端口(30123), 可以通過以下地址訪問該服務:
? 10.11.254.223:80
? <節(jié)點1 node’sIP>:30123
? <節(jié)點2 node’sIP>:30123, 等等

loadbalancer類型的服務:

負載均衡器的對外 IP地址為130.211.53.173, 因此現(xiàn)在可以通過該IP 地址訪問該服務:

參考

K8S中的IP地址
k8s之PodIP、ClusterIP和ExternalIP

總結(jié)

以上是生活随笔為你收集整理的【k8s】K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP、Internal-IP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。