Python 不使用代理远程访问Kubernetes API

Python 不使用代理远程访问Kubernetes API,python,x509certificate,kubernetes,client-certificates,Python,X509certificate,Kubernetes,Client Certificates,我正在尝试远程访问Kubernetes API(主要是从我们的Jenkins服务器),这样我们就可以执行RESTful操作,而不必依赖于kubectl。理想情况下,我希望在Go或Python中实现这一点,但我尝试过的库都没有成功,使用urllib2直接返回各种错误。我已经能够通过curl进行连接(尽管也有一些奇怪的错误),但我希望不必为所有这些生成curl GET/PUT请求 所以我的问题是:一些善良的灵魂(也许是来自谷歌的人?)能否概述我需要从远程位置使用Kubernetes API服务器进行

我正在尝试远程访问Kubernetes API(主要是从我们的Jenkins服务器),这样我们就可以执行RESTful操作,而不必依赖于
kubectl
。理想情况下,我希望在Go或Python中实现这一点,但我尝试过的库都没有成功,使用
urllib2
直接返回各种错误。我已经能够通过curl进行连接(尽管也有一些奇怪的错误),但我希望不必为所有这些生成curl GET/PUT请求

所以我的问题是:一些善良的灵魂(也许是来自谷歌的人?)能否概述我需要从远程位置使用Kubernetes API服务器进行正确身份验证的步骤?非常感谢您的指导,因为我有兴趣了解更多关于x509的信息,但我正在努力将所有的部分结合在一起

基本有效的卷曲结构

这些.pem文件是根据
~/.kube/config

$ curl --header "Authorization: Bearer $TOKEN" -key key.pem -cacert ca.pem -cert client.pem https://MASTER_IP/api
curl: (6) Could not resolve host: key.pem
curl: (6) Could not resolve host: ca.pem
curl: (6) Could not resolve host: client.pem
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "172.20.0.9:443"
    }
  ]
}
2016年4月14日更新 因此,我似乎需要将其中一些文件重命名为.crt文件。在阅读了curl的潜在问题之后,我尝试了一下wget,它似乎没有问题,甚至没有指定auth头。对基于客户端的身份验证的任何见解都将受到赞赏

$ wget -qO- https://MASTER_IP/api --certificate client-decoded.crt --private-key clean-key.pem --ca-certificate ca.crt
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "172.20.0.9:443"
    }
  ]
}

请查看受支持的客户端库()

要与官方Go客户端进行连接,类似这样的操作应该有效,您可以轻松地传入Kubecfg文件,然后客户端将使用该文件进行连接:

func newKubeClient() (*kclient.Client, error) {
    var (
        config    *kclient.Config
        err       error
        masterURL string
    )

    if *argKubeMasterURL != "" {
        masterURL, err = expandKubeMasterURL()

        if err != nil {
            return nil, err
        }
    }

    if masterURL != "" && *argKubecfgFile == "" {
        config = &kclient.Config{
            Host:    masterURL,
            Version: "v1",
        }
    } else {
        overrides := &kclientcmd.ConfigOverrides{}
        overrides.ClusterInfo.Server = masterURL
        rules := &kclientcmd.ClientConfigLoadingRules{ExplicitPath: *argKubecfgFile}
        if config, err = kclientcmd.NewNonInteractiveDeferredLoadingClientConfig(rules, overrides).ClientConfig(); err != nil {
            return nil, err
        }
    }

    glog.Infof("Using %s for kubernetes master", config.Host)
    glog.Infof("Using kubernetes API %s", config.Version)
    return kclient.New(config)
}
您在--key、-cacert和--cert args上缺少破折号,并且可能还需要将证书指定为./client.pem