В любом случае, чтобы получить внешние порты кластера кубернетов

Я выставил службу на внешний порт на всех узлах в кластере 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".

Ответ 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 является идеальным вариантом и может использоваться для извлечения дополнительной информации.