【问题标题】:What are the relationships between Kubernetes services and clusters and Google Compute Engine objects?Kubernetes 服务和集群与 Google Compute Engine 对象之间有什么关系?
【发布时间】:2016-05-28 06:26:42
【问题描述】:

我正在设置几个在 Google Container Engine 上运行的服务,流量通过 Google HTTP 负载均衡器进入,使用路径映射。

关于设置基于内容的负载平衡here 有一个很好的 Google 教程,但它都是关于普通的 Google Compute 对象,如实例组和后端服务。但是,我有 Kubernetes 服务、Pod 和集群。

Kubernetes 对象和 Google Compute 资源之间有什么关系?如何以编程方式在两者之间进行映射?

(我知道我可以使用 Kubernetes Web 入口对象来进行平衡,正如 here 所解释的那样,但看起来 Kubernetes Ingress 还不支持 HTTPS,这需要。)

【问题讨论】:

    标签: google-compute-engine kubernetes google-kubernetes-engine


    【解决方案1】:

    Kubernetes 对象和 Google Compute 资源之间有什么关系?如何以编程方式在两者之间进行映射?

    https://github.com/kubernetes/contrib/tree/master/Ingress/controllers/gce#overview

    (我知道我可以使用 Kubernetes Web Ingress 对象来进行平衡,如此处所述,但看起来 Kubernetes Ingress 尚不支持 HTTPS,这需要。)

    Ingress 将在 1.2 中支持 HTTPS。这就是资源的样子:https://github.com/kubernetes/kubernetes/issues/19497#issuecomment-174112834。同时,您可以使用 Ingress 设置 HTTP 负载平衡并手动修改它以支持 https。事先道歉,这是令人费解的,它会很快好起来的。

    首先创建一个 HTTP Ingress:

    1. 创建Type=NodePort的服务
    2. 确保您拥有BackendService quota
    3. 创建一个HTTP Ingress
    4. 在防火墙中公开服务的节点端口(也如https://cloud.google.com/container-engine/docs/tutorials/http-balancer 中所述)
    5. 等到 kubect describe ing 显示 HEALTHY for you backends

    此时,您应该能够 curl 您的 Ingress 负载均衡器 IP 并点击 nginx 服务(或您在第 1 步中创建的任何服务)。

    然后通过GCE console手动执行以下操作:

    1. 将 Ingress 资源的 IP 从“Ephmermal”更改为“Static”(在“外部 IP 地址”标签中的 kubectl get ing 中查找 IP)
    2. 创建您的 ssl 证书。如果您只想要一个自签名证书,您可以这样做:

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/nginx.key -out /tmp/nginx.crt -subj "/CN=nginxsvc/O=nginxsvc"

    1. 为 HTTPS 负载平衡器创建新的目标 HTTPS 代理和转发规则,并将其分配给 http 负载平衡器的相同(静态)IP。

    此时你应该可以 curl https://loadbalancer-ip -k

    【讨论】:

    • GLBC 文档的链接非常有帮助,谢谢。但是,我仍然有一个问题,即如何将其他 GCE 概念添加到入口,或者将来自该 k8s 集群之外的服务添加到入口。特别是,我有一个 gcloud 计算“地址”,我想将其用于此入口;有没有办法让我在 yaml 文件中指定它?如果没有,是否可以使用 gcloud 在命令行上指定? (我试图在这里有一个可重现的过程,因此尽量避免使用 UI 控制台。)
    • 嗨安娜(已经有一段时间了)!我认为你最好的选择可能是一起避开入口对象,只配置你自己的自定义 L7 负载平衡配置。然后,您可以使用平衡器配置中未通过入口抽象公开的所有高级功能。
    • 您必须先将该服务作为 NodePort 服务导入 Kubernetes,然后将 Ingress 指向该 NodePort 服务。您可以通过创建没有选择器的服务来导入它:github.com/kubernetes/kubernetes/blob/release-1.1/docs/…(确保服务的类型是 NodePort,并且您创建的端点具有您的外部服务的 IP)。在这一点上,它就像任何其他 NodePort 服务一样。请注意,您正在弹跳 L7 -> k8s 节点 -> 您的外部服务,因此这在性能方面显然不是最佳的。
    • 感谢罗伯特和普拉尚特。我遵循了罗伯特的建议(在stackoverflow.com/questions/35446512/… 中有更多详细信息),并且效果很好。我缺少的关键见解是意识到 k8s 集群相当于一个计算实例组,我可以将我的 NodePort 设置为组上的命名端口,然后将其全部视为常规计算服务,用于在平衡器后面进行配置.
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2017-04-07
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多