Назад | Перейти на главную страницу

GKE больше не отправляет информацию об авторизации

У меня есть код Python, который:

Я использовал Kubernetes версии 1.11, но 9.12.2019 эта версия была удалена из GKE, поэтому я перешел на 1.12.

С тех пор, как я перешел на 1.12, взаимодействие с кубернетами перестало работать со следующей ошибкой:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.7/site-packages/mypackage/__main__.py", line 89, in <module>
    function(**function_args)
  File "/usr/local/lib/python3.7/site-packages/mypackage/env.py", line 50, in create
    kubernetes.config.load_kube_config(config_file=mypackage.googlecloud.kubernetesengine.config)
  File "/usr/local/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 649, in load_kube_config
    loader.load_and_set(config)
  File "/usr/local/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 462, in load_and_set
    self._load_cluster_info()
  File "/usr/local/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 428, in _load_cluster_info
    file_base_path=base_path).as_file()
  File "/usr/local/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 101, in __init__
    self._data = obj[data_key_name]
  File "/usr/local/lib/python3.7/site-packages/kubernetes/config/kube_config.py", line 499, in __getitem__
    % (key, self.name))
kubernetes.config.config_exception.ConfigException: Invalid kube-config file. Expected key username in /root/.kube/config/{'name': 'my-user', 'user': {'username': None, 'password': None}}/user

Оказывается, мой код на Python создавал ~/.kube/config с пустым username & password, так как get_cluster() метод больше не возвращается username & password в master_auth.

Не больше успеха с помощью команды gcloud container clusters describe, поле masterAuth все еще почти пусто.

Почему сервер GKE больше не отправляет эту информацию?

Из Повышение безопасности вашего кластера:

Примечание. Обычная проверка подлинности и выдача сертификатов клиента отключены по умолчанию для кластеров, созданных с помощью GKE 1.12 и выше.

В руководстве рекомендуется отключить для кластера методы проверки подлинности сертификата клиента и статического пароля. Учитывая, что значение по умолчанию отключено по умолчанию, возможно, в будущем будет невозможно включить базовую аутентификацию, поэтому вы можете выяснить, можно ли переделать свое приложение, чтобы использовать другой метод аутентификации / авторизации.

Я указал username & password я при создании кластера, и это устранило проблему:

import google.cloud.container_v1

client = google.cloud.container_v1.ClusterManagerClient()

client.create_cluster(

    # see https://github.com/googleapis/google-cloud-python/issues/8692#issuecomment-512442117
    project_id=None,
    zone=None,
    #

    cluster={
        "name": "name",
        "master_auth": {
            "username": my_username,
            "password": my_password
        }

        ...

    }
)

Теперь сервер возвращается .master_auth.username & .master_auth.password на get_cluster().