web-dev-qa-db-fra.com

Est-il possible d'obtenir les ports externes du cluster kubernetes?

J'ai exposé un service sur un port externe de tous les nœuds d'un kubernetes Cluster à partir de: Root @ ubuntu:/home # kubectl create -f nginx-service.yaml Vous avez exposé votre service sur port externe sur tous les nœuds de votre cluster Si vous souhaitez exposer ce service à l’Internet externe, vous devrez peut-être configurer des règles de pare-feu pour le ou les ports de service (tcp: 30002) afin de servir le trafic.

Voir http://releases.k8s.io/release-1.2/docs/user-guide/services-firewalls.md pour plus de détails . Service "nginx-service" crééroot@ubuntu :/maison#

oui, est-il possible d'obtenir les ports externes du cluster kubernetes?

8
kevin

kubectl get svc --all-namespaces -o go-template='{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'

Ceci obtient tous les services dans tous les espaces de noms, et fait en gros: "pour chaque service, pour chaque port, si nodePort est défini, affichez nodePort".

19
Tim Hockin

Si vous visualisez votre service en utilisant kubectl describe service NAME, il vous indiquera quel port a été attribué (dans le champ NodePort).

3
Robert Bailey

... et vous pouvez exécuter la même solution alternativement avec JsonPath ...

  • récupère le port externe (le "nodeport") de myservice correspondant au port interne 1234

    kubectl get svc myservice -o=jsonpath='{.spec.ports[?(@.port==1234)].nodePort}
    
  • obtenir une liste de toutes les adresses IP des nœuds sous-jacents de votre cluster

    kubectl get node -o=jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
    

Évidemment, ces informations peuvent facilement être combinées dans un script bash pratique pour répondre à tous les besoins spécifiques ...

#!/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
0
Ichthyo