2016-05-04 6 views
0

Ich habe eine Reihe von Pods zur Verfügung nsqlookupd Service. Jetzt brauche ich jeden nsqd-Container, um eine Liste von nsqlookupd-Servern zu haben, mit denen man sich gleichzeitig verbinden kann (während der Dienst jedesmal auf einen anderen Server zeigt). Etwas Ähnliches ich mitKubernetes bekommen Endpunkte

kubectl describe service nsqlookupd 
... 
Endpoints: .... 

aber ich will es in meiner Stationierung Definition in einer Variablen haben oder irgendwie aus nsqd Behälter

Antwort

2

Klingt wie Sie würde einen zusätzlichen Service benötigen entweder in Ihrem nsqd Behälter läuft oder in einem separaten Container im selben Pod. Die Rolle dieses Dienstes bestünde darin, die API regelmäßig zu polemisieren, um die Liste der Endpunkte abzurufen.

Vorausgesetzt, dass Sie Service Accounts aktiviert (standardmäßig aktiviert), hier ist ein Proof of Concept auf der Schale curl und jq aus dem Inneren einer Hülse mit:

# Read token and CA cert from Service Account 
CACERT="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" 
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) 

# Replace the namespace ("kube-system") and service name ("kube-dns") 
ENDPOINTS=$(curl -s --cacert "$CACERT" -H "Authorization: Bearer $TOKEN" \ 
    https://kubernetes.default.svc/api/v1/namespaces/kube-system/endpoints/kube-dns \ 
) 

# Filter the JSON output 
echo "$ENDPOINTS" | jq -r .subsets[].addresses[].ip 
# output: 
# 10.100.42.3 
# 10.100.67.3 

Werfen Sie einen Blick auf den Quellcode von Kube2sky für eine gute Implementierung dieser Art von Service in Go.

0

Könnte mit PetSet (Alpha-Funktion) in 1.4 gemacht werden. Stabile Namen + stabiler Speicher