GKE 不再发送身份验证信息

GKE 不再发送身份验证信息

我有以下 Python 代码:

我之前使用的是 Kubernetes 1.11 版,但是 2019 年 12 月 9 日该版本已从 GKE 中删除,因此我切换到了 1.12 版。

自从我升级到 1.12 版后,与 kubernetes 的交互就停止了,出现以下错误:

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&passwordmaster_auth

使用命令没有成功gcloud container clusters describe,字段masterAuth仍然几乎是空的。

为什么 GKE 服务器不再发送这些信息?

答案1

加强集群的安全性

注意:对于使用 GKE 1.12 及更高版本创建的集群,基本身份验证和客户端证书颁发默认处于禁用状态。

本指南建议禁用集群的客户端证书和静态密码身份验证方法。鉴于默认设置已切换为禁用,将来可能无法再启用基本身份验证,因此您可能需要调查是否可以重新设计应用程序以使用不同的身份验证/授权方法。

答案2

我在集群创建时指定了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()

相关内容