k8s~根据podIP查看pod信息
<p>在 Kubernetes 集群中查找与特定 Pod IP(如 <code>10.10.5.7</code>)关联的服务,可以通过以下步骤操作:</p><h3 id="方法-1通过-endpoints-查询推荐">方法 1:通过 Endpoints 查询(推荐)</h3>
<pre><code class="language-bash">kubectl get endpoints --all-namespaces -o json | \
jq -r '.items[] | select(.subsets[].addresses[].ip == "10.10.5.7") | .metadata.namespace + "/" + .metadata.name'
</code></pre>
<h3 id="方法-2通过-service-选择器匹配">方法 2:通过 Service 选择器匹配</h3>
<ol>
<li><strong>先找到 Pod 的标签</strong>:</li>
</ol>
<pre><code class="language-bash">kubectl get pod --all-namespaces -o wide --field-selector status.podIP=10.10.5.7
# 输出示例:
# NAMESPACE NAME READY STATUS IP NODE LABELS
# my-namespacemy-pod-1 1/1 Running 10.10.5.7 node-1 app=myapp,env=prod
</code></pre>
<ol start="2">
<li><strong>根据标签查找服务</strong>:</li>
</ol>
<pre><code class="language-bash">kubectl get svc --all-namespaces -o json | \
jq -r '.items[] | select(.spec.selector.app == "myapp" and .spec.selector.env == "prod") | .metadata.namespace + "/" + .metadata.name'
</code></pre>
<h3 id="方法-3直接检查网络策略">方法 3:直接检查网络策略</h3>
<pre><code class="language-bash">kubectl get networkpolicy --all-namespaces -o json | \
jq -r '.items[] | select(.spec.podSelector.matchLabels.app == "myapp") | .metadata.namespace + "/" + .metadata.name'
</code></pre>
<h3 id="方法-4使用-ip-直接查询需安装-ipvs-工具">方法 4:使用 IP 直接查询(需安装 IPVS 工具)</h3>
<pre><code class="language-bash"># 在运行 kube-proxy 的节点上执行
sudo ipvsadm -Ln | grep -B1 10.10.5.7
# 输出示例:
# TCP10.96.123.45:80 rr
# -> 10.10.5.7:80 Masq 1 0 0
</code></pre>
<h3 id="解释说明">解释说明:</h3>
<ol>
<li>
<p><strong>Endpoints 方法</strong>:</p>
<ul>
<li>直接查询 Kubernetes 的 Endpoints 对象(存储了 Service 到 Pod IP 的映射)</li>
<li>需要安装 <code>jq</code> 工具(可通过 <code>apt-get install jq</code> 或 <code>brew install jq</code> 安装)</li>
</ul>
</li>
<li>
<p><strong>Service 选择器方法</strong>:</p>
<ul>
<li>先定位 Pod 的标签(LABELS 列)</li>
<li>然后查找使用相同选择器(selector)的 Service</li>
</ul>
</li>
<li>
<p><strong>如果找不到服务可能的原因</strong>:</p>
<ul>
<li>Pod 没有关联任何 Service</li>
<li>Service 的选择器与 Pod 标签不匹配</li>
<li>Pod 处于未就绪状态(检查 readinessProbe)</li>
</ul>
</li>
</ol>
<h3 id="额外诊断命令">额外诊断命令:</h3>
<pre><code class="language-bash"># 检查 Pod 是否就绪
kubectl get pod -o wide -A | grep 10.10.5.7
# 检查服务的 Endpoints
kubectl describe svc <service-name> -n <namespace> | grep -A10 Endpoints
# 检查网络连通性(在集群内节点执行)
kubectl run debug-tool -it --rm --image=nicolaka/netshoot -- bash
curl -v http://10.10.5.7:<port>
</code></pre>
<p>根据您的集群规模,推荐优先使用 <strong>方法 1</strong>(Endpoints 查询),这是最直接有效的方式。如果未安装 <code>jq</code>,可以使用以下替代命令:</p>
<pre><code class="language-bash">kubectl get endpoints -A -o jsonpath='{range .items[?(@.subsets)]}{.metadata.namespace}{" "}{.metadata.name}{"\n"}{range .subsets[*].addresses[*]}{.ip}{"\n"}{end}{end}' | \
grep -B1 10.10.5.7
</code></pre>
</div>
<div id="MySignature" role="contentinfo">
<p></p>
<div class="navgood">
<p>作者:仓储大叔,张占岭,<br>
荣誉:微软MVP<br>QQ:853066980</p>
<p><strong>支付宝扫一扫,为大叔打赏!</strong>
<br><img src="https://images.cnblogs.com/cnblogs_com/lori/237884/o_IMG_7144.JPG"></p>
</div><br><br>
来源:https://www.cnblogs.com/lori/p/18985109
頁:
[1]