AWS EKS - Аутентифицировать библиотеку Python Kubernetes изнутри модуля - PullRequest
0 голосов
/ 01 октября 2018

Цель

Я хочу подключиться и вызывать API-интерфейсы REST Kubernetes изнутри работающего модуля, рассматриваемый Kubernetes - это кластер AWS EKS, использующий аутентификацию IAM.Все это с использованием Kubernetes Python lib.

Что я пробовал

Изнутри моего python file:

from kubernetes import client, config

config.load_incluster_config()
v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)

Приведенная выше команда выдает ошибку 403,Я полагаю, что это связано с другим механизмом аутентификации, который использует AWS EKS.

То, что я уже знаю, работает

ApiToken = 'eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.xxx.yyy'
    configuration = client.Configuration()
    configuration.host = 'https://abc.sk1.us-east-1.eks.amazonaws.com'
    configuration.verify_ssl = False
    configuration.debug = True
    configuration.api_key = {"authorization": "Bearer " + ApiToken}
    client.Configuration.set_default(configuration)

Хотя вышеописанное работает, мне нужно жестко закодировать токен, который я генерирую локальночерез kubectl и проверьте его в коде, представляющем угрозу безопасности.

Есть ли более правильный способ аутентификации libon-библиотеки Kubernetes с помощью AWS EKS?

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете использовать следующий метод для получения токена:

def get_token(cluster_name):
    args = ("/usr/local/bin/aws-iam-authenticator", "token", "-i", cluster_name, "--token-only")
    popen = subprocess.Popen(args, stdout=subprocess.PIPE)
    popen.wait()
    return popen.stdout.read().rstrip()

api_token = get_token("<cluster_name>")
configuration = client.Configuration()
configuration.host = '<api_endpoint>'
configuration.verify_ssl = False
configuration.debug = True
configuration.api_key['authorization'] = "Bearer " + api_token
configuration.assert_hostname = True
configuration.verify_ssl = False
client.Configuration.set_default(configuration)

v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)
print ret

Существует PR для kubernetes-client / python-base, который добавляет поддержку плагинов exec, Попытка реализовать exec-поддержка плагинов в kubeconfig .

...