2016-04-09 5 views
0

Я пытаюсь получить удаленный доступ к API Kubernetes (в основном с нашего сервера Jenkins), поэтому мы можем выполнять действия RESTful и не полагаться на kubectl. В идеале я бы хотел сделать это в Go или Python, но ни одна из библиотек, которые я пробовал, не была успешной, и использование urllib2 напрямую возвращает множество ошибок. Я смог подключиться через curl (хотя и с некоторыми странными ошибками), но я надеялся, что вам не придется формировать зависающие запросы GET/PUT для всего этого.Удаленный доступ к API Kubernetes без прокси

Итак, мой вопрос: может ли какая-то душа (возможно, кто-то из Google?) Описать шаги, которые мне необходимы для правильной авторизации с сервером API Kubernetes из удаленного места? Любое руководство очень ценит, поскольку мне интересно узнать больше о x509, но я стараюсь связать все части вместе.

структура Curl, которая в основном работы

Эти .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" 
    } 
    ] 
} 

4/14/2016 Update Таким образом, кажется, что я необходимо переименовать некоторые из них в виде .crt-файлов. Прочитав о возможных проблемах с завитом, я дал wget go, и, похоже, проблем нет, даже не указав заголовок 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 args, а также может потребоваться указать сертификат как ./client.pem –

ответ

0

Посмотрите на поддерживаемые клиентские библиотеки (https://github.com/kubernetes/kubernetes/blob/release-1.2/docs/devel/client-libraries.md).

Чтобы соединиться с официальным Go клиента что-то вроде это должно работать, вы можете легко перейти в 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) 
}