2016-05-04 2 views
0

У меня есть набор стручков, предоставляющих сервис nsqlookupd. Теперь мне нужно, чтобы каждый контейнер nsqd располагал списком серверов nsqlookupd для подключения (пока служба будет указывать на разные каждый раз) одновременно. Нечто подобное я сKubernetes get endpoints

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

, но я хочу, чтобы иметь его в переменной в моем определении развертывания или каким-то образом внутри nsqd контейнера

ответ

2

Похоже, вам потребуется дополнительный сервис работает либо в вашем nsqd контейнере или в отдельном контейнере в том же контейнере. Роль этой службы заключается в том, чтобы регулярно использовать API для получения списка конечных точек.

Предполагая, что вы включили Service Accounts (по умолчанию включено), вот доказательство концепции на корпусе с помощью curl и jq внутри стручка:

# 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 

Посмотрите на исходный код Kube2sky для хорошая реализация такого рода услуг в Go.

0

Может быть выполнено с помощью PetSet (alpha feature) в 1.4. Стабильные имена + стабильное хранилище