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.