В API kubernetes есть функция для извлечения всех сервисов по аннотациям - PullRequest
0 голосов
/ 13 мая 2019

Я настраиваю кластер kubernet для развертывания наших контейнерных приложений. Приложениям действительно нужны все метки, но они длиннее 63 символов, и я получаю ошибку . Это делает меня зависимым от аннотаций.

Аннотация к услуге выглядит следующим образом: com.example.development.london/component.proxy-config.secure-routes.backend.proxy-path. / служит только для обхода ошибки домена RFC.

В приложении Golang запрашиваются все службы пространства имен. На самом деле на основе меток. Для этого я использовал следующий код:

func (kc *KubernetesCollector) generateRoutes(errorChannel chan<- error) {
    log.Println("INFO: Try to generate routes")
    services, err := kc.iface.Services(kc.namespace).List(metav1.ListOptions{
        LabelSelector: fmt.Sprintf("%s==true", ConvertLabelToKubernetesAnnotation(ProxyConfDiscoverableLabel)),
    })
...

func ConvertLabelToKubernetesAnnotation(label string) string {
    return strings.Replace(label, "com.example.development.london.", "com.example.development.london/", -1)
}

Но нет возможности вернуть услуги, используя аннотации. Кто-нибудь знает другой способ, как я могу получить все услуги, которые относятся к аннотации с Go?

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

FieldSelector для аннотаций отсутствует.Что вы можете сделать, так это включить все службы в свой список и затем отфильтровать их по аннотациям, найденным в каждом из них.

0 голосов
/ 13 мая 2019

Как указано в документации Kubernetes , аннотации предназначены для неидентифицирующей информации, поэтому, естественно, вы не должны использовать их для поиска объектов.

Если это вариант, вы можетеприкрепите префикс (максимальная длина 253 символа) к вашему ярлыку следующим образом: <label prefix>/<label name>.Дополнительную информацию можно найти по ссылке, указанной выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...