使用python客户端访问Kubernetes集群

时间:2019-03-24 16:47:53

标签: python kubernetes kubectl

我有我的kubernetes集群,该集群部署在云中,并且我有一个本地代理,我应该使用该代理从桌面连接我的k8s集群。我可以通过运行代理使用kubectl没有问题地访问我的集群。现在,我试图查看是否可以仅通过使用python客户端实用程序来消除kubectl命令行实用程序。

因此,在我的第一个要求中,我消除了kubectl,并且可以使用以下代码访问我的集群。事实是,我的访问令牌仅在15分钟内有效,发布后,我将不得不使用kubectl运行我的代理,以便在kubeconfig文件中更新刷新的令牌,这样我以后15分钟就可以了。

所以我的问题并寻求建议, 1.有什么方法可以通过仅使用kubernetes python客户端和本地代理来完全消除kubectl。 2.如何自动获取刷新的令牌,因此不必每隔15分钟运行一次代理。

赞赏任何想法/文档/示例。

   from kubernetes import client, config

   def main():
     try:
        #config.load_kube_config('kubeconfig',persist_config=True)
        config.load_kube_config('kubeconfig')
        kube_host = config.kube_config.Configuration._default.host+":443"
        kube_api_key = config.kube_config.Configuration._default.api_key
        aConfiguration = client.Configuration()

        # Specify the endpoint of your Kube cluster
        aConfiguration.host = kube_host

        aConfiguration.verify_ssl = False
        aConfiguration.api_key = kube_api_key
        aApiClient = client.ApiClient(aConfiguration)

        # Do calls
        v1 = client.CoreV1Api(aApiClient)
        api_response = v1.list_namespaced_pod('default')
        print(api_response)
    except Exception as e:
        print("Exception when calling CoreV1Api->list_namespaced_pod: %s\n" % e)


     if __name__ == '__main__':
          main()

2 个答案:

答案 0 :(得分:1)

答案是:https://stackoverflow.com/a/48377444/5936468

您可以创建服务帐户并将其令牌用于身份验证

答案 1 :(得分:0)

通过添加以下行,我能够通过 python 客户端访问集群

<块引用>

client.Configuration._default.proxy = "proxy_url"

已修改下面的代码,这应该可以解决您的问题。

from kubernetes import client, config

def main():
    try:
        #config.load_kube_config('kubeconfig',persist_config=True)
        config.load_kube_config('kubeconfig')
        # add proxy here
        client.Configuration._default.proxy = "proxy_url"
        kube_host = config.kube_config.Configuration._default.host+":443"
        kube_api_key = config.kube_config.Configuration._default.api_key
        aConfiguration = client.Configuration()

        # Specify the endpoint of your Kube cluster
        aConfiguration.host = kube_host

        aConfiguration.verify_ssl = False
        aConfiguration.api_key = kube_api_key
        aApiClient = client.ApiClient(aConfiguration)

        # Do calls
        v1 = client.CoreV1Api(aApiClient)
        api_response = v1.list_namespaced_pod('default')
        print(api_response)
    except Exception as e:
        print("Exception when calling CoreV1Api->list_namespaced_pod: %s\n" % e)


if __name__ == '__main__':
    main()

参考:https://github.com/kubernetes-client/python/issues/333