代码之家  ›  专栏  ›  技术社区  ›  sfgroups

如何将kubelet港映射到POD

  •  1
  • sfgroups  · 技术社区  · 6 年前

    我的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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Rico    6 年前

    我假设您已经在kubernetes中公开了一个使用NodePort类型的服务,该类型将解释高端口号。如果是这种情况,您只需获得集群中运行的所有服务的列表,然后搜索所需的端口。即。

    kubectl get svc --all-namespaces | grep 38641

    一旦您拥有公开此端口的服务,您就可以检查该服务并查看该服务正在选择哪些pod

    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

    我们可以捕获pod名称以供进一步检查,例如确定它们来自的复制集:

    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;