В любом случае, чтобы получить внешние порты кластера кубернетов
Я выставил службу на внешний порт на всех узлах в кластере kubernetes из:
kubectl create -f nginx-service.yaml
Вы выставили свою службу на внешний порт на всех узлах в вашем кластере. Если вы хотите предоставить эту службу внешнему Интернету, вам может потребоваться настроить правила брандмауэра для порта (портов) службы (tcp: 30002) для обслуживания трафика.
См. Http://releases.k8s.io/release-1.2/docs/user-guide/services-firewalls.md для получения дополнительной информации. сервис "nginx-сервис" создан. '
Есть ли способ получить внешние порты кластера kubernetes?
Ответы
Ответ 1
kubectl get svc --all-namespaces -o go-template='{{range.items}}{{range.spec.ports}}{{if.nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'
Это получает все службы во всех пространствах имен и в основном: "для каждой службы для каждого порта, если nodePort определен, print nodePort".
Ответ 2
Если вы просматриваете свой сервис, используя kubectl describe service NAME
он должен показать вам, какой порт был назначен (в поле NodePort).
Ответ 3
... и вы можете выполнить то же решение в качестве альтернативы с JsonPath...
-
получить внешний порт ("nodePort") myservice
соответствующий внутреннему порту 1234
kubectl get svc myservice -o=jsonpath='{.spec.ports[?(@.port==1234)].nodePort}
-
получить список всех IP-адресов узлов, лежащих в основе вашего кластера
kubectl get node -o=jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
Очевидно, что эта информация может быть легко объединена в удобный сценарий bash для удовлетворения любых конкретных потребностей...
#!/bin/bash
#
# discoverService - extract the externally visible Node-IP and port for a specific Service in Kubernetes
#
KUBECTL=kubectl
#
if [[ $# < 2 || "$1" == "-h" ]]
then
echo discoverService SERVICENAME INTERNALPORT
exit -1
fi
SERVICENAME=$1
INTERNALPORT=$2
EXTPORT='${KUBECTL} get svc $SERVICENAME -o=jsonpath="{.spec.ports[?(@.port==${INTERNALPORT})].nodePort}"'
EXTIP='${KUBECTL} get node -o=jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}''
if [[ -z $EXTPORT ]]
then
echo -e "ERROR: service=$SERVICENAME internal-port=$INTERNALPORT not found.\n"
exit -2
elif [[ -z $EXTIP ]]
then
echo -e "ERROR: could not retrieve underlying node IPs.\n"
exit -2
fi
# Success...
echo $EXTIP:$EXTPORT
Ответ 4
Я надеюсь, что этот ответ является коротким и простым:
kubectl describe service --all-namespaces | grep -i nodeport
Но использование шаблона go является идеальным вариантом и может использоваться для извлечения дополнительной информации.