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?
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".
Si vous visualisez votre service en utilisant kubectl describe service NAME
, il vous indiquera quel port a été attribué (dans le champ NodePort).
... 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