Раньше я могла завить
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1beta3/namespaces/default/
как мой базовый URL, но в Kubernetes 0.18.0 он дает мне "неавторизованный". Странно то, что если бы я использовал внешний IP-адрес машины API ( http://172.17.8.101:8080/api/v1beta3/namespaces/default/
), он работал нормально.
kubernetes
tslater
источник
источник
$KUBERNETES_SERVICE_HOST
и$KUBERNETES_PORT_443_TCP_PORT
переменные берутся?Ответы:
В официальной документации я нашел это:
https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#accessing-the-api-from-a-pod
По-видимому, мне не хватало токена безопасности, который мне не понадобился в предыдущей версии Kubernetes. Исходя из этого, я разработал то, что я считаю более простым решением, чем запуск прокси или установка golang в моем контейнере. См. Этот пример, который получает информацию из API для текущего контейнера:
Я также использую простой двоичный файл jq ( http://stedolan.github.io/jq/download/ ) для синтаксического анализа json для использования в сценариях bash.
источник
v1beta3
наv1
--cacert
флаг curl, чтобы curl проверял сертификат, представленный apiserver.KUBERNETES_SERVICE_HOST=kubernetes.default
,$KUBERNETES_443_TCP_PORT=443
, NAMESPACE == $ (</ вар / бег / секреты / kubernetes.io / ServiceAccount / пространство имен). The URL was
kubernetes.default: 443 / API / v1 / пространство имен / $ NAMESPACE / стручки / ... `. Обратите внимание, что версия API установлена на v1 вместо v1beta3, а пространство имен по умолчанию было заменено на $ NAMESPACE.К каждому модулю автоматически применяется учетная запись службы, которая позволяет ему получить доступ к apiserver. Учетная запись службы предоставляет как учетные данные клиента в виде токена-носителя, так и сертификат центра сертификации, который использовался для подписи сертификата, представленного apiserver. С помощью этих двух частей информации вы можете создать безопасное аутентифицированное соединение с apisever без использования
curl -k
(иначеcurl --insecure
):источник
--root-ca-file=
аргумент при запуске. (это выполняется автоматически в большинстве установщиков Kubernetes). Подробнее см. Обсуждение здесь: github.com/kubernetes/kubernetes/issues/10265https://kubernetes.default/
качестве ведущегоkubernetes.default.svc
как указаноИспользование клиента Python kubernetes ..
источник
версия wget:
источник
Наиболее важным дополнением к уже упомянутым выше деталям является то, что модуль, из которого вы пытаетесь получить доступ к серверу API, должен иметь для этого возможности RBAC.
Каждый объект в системе k8s идентифицируется служебной учетной записью (например, учетная запись пользователя, используемая для пользователей). В зависимости от возможностей RBAC заполняется токен учетной записи службы (/var/run/secrets/kubernetes.io/serviceaccount/token). Привязки kube-api (например, pykube) могут принимать этот токен в качестве входных данных при создании подключения к kube-api-серверам. Если модуль имеет правильные возможности RBAC, модуль сможет установить соединение с сервером kube-api.
источник
Я столкнулся с этой проблемой при попытке получить доступ к API из модуля с помощью Go Code. Ниже показано, что я реализовал, чтобы это работало, если кто-то столкнется с этим вопросом, желая также использовать Go.
В примере используется pod-ресурс, для которого вы должны использовать
client-go
библиотеку, если вы работаете с собственными объектами kubernetes. Код более полезен для тех, кто работает с CustomResourceDefintions.источник
Изнутри модуля api-сервер kubernetes может быть доступен прямо по адресу « https: //kubernetes.default ». По умолчанию он использует «служебную учетную запись по умолчанию» для доступа к серверу api.
Таким образом, нам также необходимо передать «сертификат CA» и «токен учетной записи службы по умолчанию» для аутентификации на сервере api.
файл сертификата хранится в следующем месте внутри модуля: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
и токен учетной записи службы по умолчанию: /var/run/secrets/kubernetes.io/serviceaccount/token
Вы можете использовать клиент godaddy nodejs kubbernetes .
источник
У меня была аналогичная проблема с авторизацией в GKE, когда скрипты python внезапно вызывали исключения. Решение, которое сработало для меня, заключалось в том, чтобы дать стручкам разрешение через роль
для получения дополнительной информации введите описание ссылки здесь
источник
Для тех, кто использует Google Container Engine (на базе Kubernetes):
Простой вызов
https://kubernetes
изнутри кластера с использованием этого клиента kubernetes для Java работает.источник
При включенном RBAC учетная запись службы по умолчанию не имеет разрешений.
Лучше создать отдельную учетную запись службы для своих нужд и использовать ее для создания своего модуля.
Здесь хорошо объяснено https://developer.ibm.com/recipes/tutorials/service-accounts-and-auditing-in-kubernetes/
источник
Моя версия k8s - 1.2.0, и в других версиях она тоже должна работать ^ ^
источник
This is from the
Kubernetes в действииbook.
Вам нужно позаботиться об аутентификации . Сам сервер API сообщает, что у вас нет доступа к нему, потому что он не знает, кто вы .
Для аутентификации вам понадобится токен аутентификации. К счастью, токен предоставляется через секретный токен по умолчанию, упомянутый ранее, и хранится в файле токена в секретном томе.
Вы собираетесь использовать токен для доступа к серверу API . Сначала загрузите токен в переменную окружения:
Токен теперь хранится в переменной среды TOKEN . Вы можете использовать его при отправке запросов на сервер API:
источник