2016-04-09 43 views
0

我试图获得对Kubernetes API的远程访问(主要来自我们的Jenkins服务器),因此我们可以执行RESTful操作并且不依赖于kubectl。理想情况下,我想在Go或Python中执行此操作,但是我尝试过的所有库都没有成功,并且使用urllib2直接返回各种错误。我已经能够通过curl进行连接(虽然也有一些奇怪的错误),但我希望不必为所有这些形成curl GET/PUT请求。无代理远程访问Kubernetes API

所以我的问题是:是否可以有某种灵魂(也许是Google的某个人?)概述了我需要从远程位置正确验证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" 
    } 
    ] 
} 
+0

你错过了上--key破折号, - cacert和--cert参数,并且可能还需要将cert指定为./client.pem –

回答

0

看看支持的客户端库(https://github.com/kubernetes/kubernetes/blob/release-1.2/docs/devel/client-libraries.md)。

要与官方转到客户端这样的连接应该工作,你可以很容易地通过在kubeCfgFile然后客户端将使用该连接:

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) 
}