我的kubernetes节点之一,我看到我的kubelet在端口38641上侦听。如何也将此端口号映射到其指向的实际POD。
# netstat -alpn |grep 38641
tcp 0 0 127.0.0.1:38641 0.0.0.0:* LISTEN 9832/kubelet
tcp 0 0 127.0.0.1:45230 127.0.0.1:38641 CLOSE_WAIT 9832/kubelet
tcp 0 0 127.0.0.1:39922 127.0.0.1:38641 CLOSE_WAIT 9832/kubelet
tcp 0 0 127.0.0.1:39238 127.0.0.1:38641 ESTABLISHED 9832/kubelet
答案 0 :(得分:1)
我假设您已经使用NodePort类型在kubernetes中公开了一项服务,该服务将解释高端口号。在这种情况下,您可以简单地获取集群中正在运行的所有服务的列表,然后搜索所需的端口。即。
kubectl get svc --all-namespaces | grep 38641
一旦拥有公开此端口的服务,便可以检查该服务并查看该服务正在选择哪些容器
PORT=38641
SERVICE_OUTPUT=$(kubectl get svc --all-namespaces | grep $PORT)
NAMESPACE=$(echo $SERVICE_OUTPUT | awk '{ print $1 }')
SERVICE=$(echo $SERVICE_OUTPUT | awk '{ print $2 }')
kubectl describe -n $NAMESPACE svc $SERVICE
现在让我们获取选择器:
SELECTOR=$(kubectl describe -n $NAMESPACE svc $SERVICE | grep Selector | awk '{ print $2}')
好吧,现在我们知道选择了哪些吊舱,我们可以轻松找到这些吊舱:
kubectl get po --selector $SELECTOR -n $NAMESPACE
我们可以捕获吊舱名称以进行进一步检查,例如确定它们来自的副本集:
PODS=$(kubectl get po --selector $SELECTOR -n $NAMESPACE --no-headers=true | awk '{ print $1}')
echo $PODS
如果需要,您可以跟踪吊舱原点:
POD=full-pod-name
RS=$(kubectl -n $NAMESPACE describe po $POD | grep -hoe ReplicaSet.*);
echo rs: $RS;
DEPLOYMENT=$(kubectl -n $NAMESPACE describe $RS | grep -hoe Deployment.*);
echo deployment: $DEPLOYMENT;