Один из моих узлов 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
Я предполагаю, что вы представили службу в кубернетах с использованием типа NodePort, который учитывает высокий номер порта. В этом случае вы можете просто получить список всех служб, работающих в кластере, и затем выполнить поиск нужного порта. т.е.
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;
Я пробовал, но не видел этот порт в моем списке услуг. поэтому и разместил здесь сообщение.
вы использовали --all-namespaces?
да, я выполнил эти две команды kg svc --all-namespaces -o yaml |grep 38641
и kg all --all-namespaces -o yaml |grep 38641
, не вернув никаких результатов
что такое кг? Я не знаком с этой командой. Возможно, попробуйте запустить необработанную команду вместо использования псевдонима или сторонней функции. Также вы должны убедиться, что ваш kubectl настроен для взаимодействия с правильным кластером с помощью команд kubectl cluster-info
и kubectl config get-contexts
.
kg
- это псевдоним для kubectl get
. Я запускаю команду в правильном кластере.
в вашем кластере включен rbac? возможно, у пользователя, который вы используете, нет разрешения на просмотр определенных ресурсов.
да, в 1.11 кластер RBAC включен. Я использую учетную запись администратора для запроса кластера.
не могли бы вы приложить результаты этой команды:
sudo netstat -alpn |grep kube-proxy kubectl get svc --all-namespaces -o wide