Kubernetes中根據(jù)Pod IP查找Pod及關(guān)聯(lián)服務(wù)的實現(xiàn)方式
在 Kubernetes 集群中,有時候我們只知道 Pod 的 IP 地址,需要快速定位對應(yīng)的 Pod 以及其關(guān)聯(lián)的 Service。
這篇文章總結(jié)了幾種可行的方法,并提供一些實用的診斷技巧。
方法一:通過 Endpoints 定位(推薦)
Kubernetes 的 Endpoints 對象保存了 Service 與 Pod IP 的映射關(guān)系,因此這是最直接的方法。
kubectl get endpoints --all-namespaces -o json | \ jq -r '.items[] | select(.subsets[].addresses[].ip == "10.255.111.149") | .metadata.namespace + "/" + .metadata.name'
注意:
- 需要安裝
jq工具(apt-get install jq或brew install jq)。 - 輸出結(jié)果會顯示 Pod 所屬 Service 的命名空間和名稱。
如果系統(tǒng)未安裝 jq,也可以使用 jsonpath:
kubectl get endpoints -A -o jsonpath='{range .items[?(@.subsets)]}{.metadata.namespace}{" "}{.metadata.name}{"\n"}{range .subsets[*].addresses[*]}{.ip}{"\n"}{end}{end}' | \
grep -B1 10.255.111.149
示例輸出:
uat redis 10.255.111.149
- uat: 命名空間
- redis: Service 名稱
- 10.255.111.149: Pod IP 地址
方法二:通過 Service 的選擇器(Selector)匹配
1、先找到 Pod 的標簽:
kubectl get pod --all-namespaces -o wide --field-selector status.podIP=10.255.111.149
示例輸出:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES uat redis-5d57b8754f-ndlq7 1/1 Running 0 217d 10.255.111.149 10-255-101-210 <none> <none>
- NAMESPACE: 命名空間
- NAME: Pod 名稱
- READY: Pod 狀態(tài)
- STATUS: Pod 運行狀態(tài)
- RESTARTS: 重啟次數(shù)
- AGE: Pod 存活時間
- IP: Pod IP 地址
- NODE: Pod 所在節(jié)點
- NOMINATED NODE: 提名節(jié)點(無)
- READINESS GATES: 就緒門(無)
2、根據(jù)標簽查找對應(yīng)的 Service:
kubectl get svc --all-namespaces -o json | \ jq -r '.items[] | select(.spec.selector.app == "myapp" and .spec.selector.env == "prod") | .metadata.namespace + "/" + .metadata.name'
注意:
- 如果找不到服務(wù),可能是 Pod 沒有被任何 Service 選擇,或者標簽不匹配。
- Service 的 Endpoints 只會包含處于 Ready 狀態(tài)的 Pod。
方法三:檢查網(wǎng)絡(luò)策略(NetworkPolicy)
如果集群中啟用了 NetworkPolicy,有時候需要確認 Pod 是否在某些策略范圍內(nèi):
kubectl get networkpolicy --all-namespaces -o json | \ jq -r '.items[] | select(.spec.podSelector.matchLabels.app == "myapp") | .metadata.namespace + "/" + .metadata.name'
網(wǎng)絡(luò)策略不會告訴你 Pod 關(guān)聯(lián)的 Service,但可用于排查流量訪問受限的原因。
方法四:通過節(jié)點 IPVS / iptables 直接查找(高級)
如果你想直接查看流量在節(jié)點上的轉(zhuǎn)發(fā)情況,可以在運行 kube-proxy 的節(jié)點上使用:
sudo ipvsadm -Ln | grep -B1 10.255.111.149
說明:
- 這種方法適合調(diào)試流量問題或者確認服務(wù)負載分發(fā)情況。
- 對于 iptables 模式的 kube-proxy,可以使用
sudo iptables-save查找 Pod IP。
額外診斷命令
- 檢查 Pod 就緒狀態(tài):
kubectl get pod -o wide -A | grep 10.255.111.149
輸出示例:
uat redis-5d57b8754f-ndlq7 1/1 Running 0 217d 10.255.111.149 10-255-101-210 <none> <none>
- 查看 Service 對應(yīng)的 Endpoints:
kubectl describe svc <service-name> -n <namespace> | grep -A10 Endpoints
- 測試網(wǎng)絡(luò)連通性(在集群內(nèi)節(jié)點執(zhí)行):
curl -v http://10.255.111.149:<port>
總結(jié)與建議
- 優(yōu)先使用 Endpoints 方法:最直接、信息最全。
- 結(jié)合 Pod 標簽和 Service 選擇器:可以快速排查標簽不匹配問題。
- 網(wǎng)絡(luò)策略和節(jié)點工具:適合調(diào)試訪問受限或流量異常場景。
診斷思路:
- Pod IP 確認 → Pod 就緒狀態(tài) → Service Endpoints → 網(wǎng)絡(luò)策略 → 節(jié)點流量轉(zhuǎn)發(fā)
通過這些方法,可以高效定位 Pod 及其關(guān)聯(lián)服務(wù),解決調(diào)試和運維中遇到的訪問問題。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
節(jié)點NotReady后容器驅(qū)逐時間調(diào)整方式
文章介紹了Kubernetes早期版本中用于節(jié)點監(jiān)控和Pod驅(qū)逐的參數(shù),以及在k8s1.20版本后這些參數(shù)的廢棄情況,通過測試,驗證了新的TaintBasedEvictions機制的有效性,此外,還介紹了與Pod驅(qū)逐效率相關(guān)的kube-controller-manager參數(shù),包括大規(guī)模集群的處理邏輯2026-01-01
Kubernetes應(yīng)用服務(wù)質(zhì)量管理詳解
這篇文章主要為大家介紹了Kubernetes應(yīng)用服務(wù)質(zhì)量管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
在Kubernetes集群中搭建Istio微服務(wù)網(wǎng)格的過程詳解
這篇文章主要介紹了在Kubernetes集群中搭建Istio微服務(wù)網(wǎng)格,我們采用default配置檔部署istio網(wǎng)格,istioctl?install命令不指定任何配置檔默認就是呀default配置檔,需要的朋友可以參考下2022-05-05
阿里云kubernetes查找鏡像中jar包的方法(docker查看鏡像中的jar)
這篇文章主要給大家介紹了關(guān)于阿里云kubernetes查找鏡像中jar包的方法,也就是在docker查看鏡像中的jar,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-09-09
kubernetes?Volume存儲卷configMap學習筆記
這篇文章主要為大家介紹了kubernetes?Volume存儲卷configMap學習筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
OSS獲取阿里云的bucket和endpoint實現(xiàn)方式
本文介紹了獲取阿里云OSS的bucket和endpoint的方法,這兩個參數(shù)決定了文件的最終訪問地址,bucket是OSS項目名稱,endpoint是存儲服務(wù)器位置,此外,還提到了OSS的文件管理與域名管理功能2026-03-03

