2016-04-09 11 views
0

Ich versuche, Remote-Zugriff auf die Kubernetes-API (in erster Linie von unserem Jenkins-Server) zu erhalten, damit wir RESTful Aktionen durchführen können und nicht auf kubectl verlassen. Idealerweise würde ich dies in Go oder Python tun, aber keine der Bibliotheken, die ich ausprobiert habe, war erfolgreich, und die Verwendung von urllib2 gibt direkt eine Vielzahl von Fehlern zurück. Ich konnte mich über curl verbinden (wenn auch mit ein paar seltsamen Fehlern), aber ich hatte gehofft, dass ich für all das keine Curl-GET/PUT-Anfragen erstellen musste.Remote-Zugriff auf Kubernetes-API Ohne den Proxy

Also meine Frage ist: kann eine Art Seele (vielleicht jemand von Google?) Die Schritte beschreiben, die ich brauche, um mit dem Kubernetes-API-Server von einem Remotestandort ordnungsgemäß zu authentifizieren? Jede Anleitung wird sehr geschätzt, da ich daran interessiert bin, mehr über x509 zu lernen, aber mich anstrengen muss, alle Teile zusammen zu binden.

Curl-Struktur, die grundsätzlich

Diese .pem-Dateien wurden manuell aus den Werten erstellt in ~/.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 aktualisieren So scheint es, dass ich funktioniert benötigt, um einige dieser als .crt-Dateien umzubenennen. Nachdem ich über mögliche Probleme mit curl gelesen hatte, gab ich wget heraus und es scheint keine Probleme zu haben, ohne sogar einen Auth-Header zu spezifizieren. Jeder Einblick in Client-basierte Authentifizierung wird geschätzt.

$ 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

Sie einen Strich auf --key sind vermisst , --cacert und --cert args, und müssen möglicherweise auch das Cert als ./client.pem angeben –

Antwort

0

Sehen Sie sich die unterstützten Client-Bibliotheken an (https://github.com/kubernetes/kubernetes/blob/release-1.2/docs/devel/client-libraries.md).

mit dem offiziellen Go-Client so etwas wie dies sollte verbinden arbeiten, können Sie einfach in einem kubeCfgFile passieren kann und dann wird der Kunde, dass die Verbindung verwenden:

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