在 Google 容器引擎上访问 Kubernetes API

Accessing Kubernetes API on Google Container Engine

根据 Kubernetes API 文档,可以 create/list/delete pods、复制控制器和服务:

http://kubernetes.io/third_party/swagger-ui/#!/v1beta1

然而,在 Google 容器引擎文档中,他们似乎没有公开这个 API。您可以通过 REST API 管理的唯一资源是集群。 Pods,必须使用 gcloud 管理复制控制器和服务。

使用 Google 容器引擎时是否可以访问 Kubernetes API?

在 Google 容器引擎上启动容器集群后,您将在 GCP 项目的 VM 上拥有一个 master 运行ning kubernetes API。如果您 运行 gcloud preview container clusters list 您将看到 kubernetes API 可用的端点以及访问它所需的 http 基本身份验证凭据。

gcloud 与最新版本的 kubectl 捆绑在一起,并且能够为您使用 Google 容器引擎启动的任何容器集群执行它。例如,要列出 pods,您可以 运行 gcloud preview container kubectl list pods

https://cloud.google.com/sdk/gcloud/reference/preview/container/kubectl 描述了 gcloud preview container kubectl 命令及其接受的标志。

我专门为这个主题创建了一个 blog post。它包括代码和演示的视频演练。本质上,您可以从 Google 容器引擎 API 获取 Kubernetes 凭据。以下是在 golang 中的实现方法:

func newKubernetesClient(clstr *container.Cluster) (*kubernetes.Clientset, error) {
    cert, err := base64.StdEncoding.DecodeString(clstr.MasterAuth.ClientCertificate)
    if err != nil {
        return nil, err
    }
    key, err := base64.StdEncoding.DecodeString(clstr.MasterAuth.ClientKey)
    if err != nil {
        return nil, err
    }
    ca, err := base64.StdEncoding.DecodeString(clstr.MasterAuth.ClusterCaCertificate)
    if err != nil {
        return nil, err
    }
    config := &rest.Config{
        Host:            clstr.Endpoint,
        TLSClientConfig: rest.TLSClientConfig{CertData: cert, KeyData: key, CAData: ca},
        Username:        clstr.MasterAuth.Username,
        Password:        clstr.MasterAuth.Password,
        // Insecure:        true,
    }
    kbrnts, err := kubernetes.NewForConfig(config)
    if err != nil {
        return nil, err
    }
    return kbrnts, nil
}