У меня есть код Python, который:
~/.kube/config
с использованием значений, сгенерированных сервером .master_auth.password
& .master_auth.username
из get_cluster()
(Библиотека Google Cloud Container)Я использовал 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()
.