【问题标题】:Is there a way to get a domain for GKE loadbalancer instead of an ip?有没有办法为 GKE 负载均衡器获取域而不是 ip?
【发布时间】:2019-10-19 13:27:33
【问题描述】:

编辑:我正在开发一个项目,该项目每天以 100% 自动的方式在 GKE 上部署多个项目。我们的项目是用nodejs开发的,这里是一个伪代码:

projects = get_all_projects_today() // returns 15 projects for today (for example)

for project in projects
    deploy_to_GKE(project) //generate a deployment manifest for project and post it to GKE (using api call)
    public_ip = create_service_on_GKE(project, type=Loadbalancer) //generate a service manifest (type loadbalancer) for project, post it to GKE (using api call) and returns the public created ip address
    get_domain_from_ip(public_ip) //how to do this !

部署的项目必须可以通过域名访问,而不是像这样的 ip:

appx.mysite.com, or
mysite.com/appx

结束编辑

这是我使用的服务清单示例:

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": "backend-__ID__"
    },
    "spec": {
        "selector": {
            "app": "backend-__ID__"
        },
        "type": "LoadBalancer",
        "ports": [
            {
                "name": "app1",
                "protocol": "TCP",
                "port": 8080,
                "targetPort": "8080"
            },
            {
                "name": "app2",
                "protocol": "TCP",
                "port": "3010",
                "targetPort": "3010"
            }
        ]
    }
}

这在谷歌云上给了我这个结果:

从外部访问项目的唯一方法是使用ip地址(Endpoint),但这会阻止cookie的使用(我们不能在ip上设置cookie,我们应该使用域名)。

那么有没有办法从 GKE 命名域中自动获取 Endpoints 以从外部访问项目?

我尝试使用反向 DNS 查找来获取外部 ip 的域名,但这不起作用:(

谢谢

【问题讨论】:

    标签: cookies dns load-balancing google-kubernetes-engine


    【解决方案1】:

    GKE 不会为您创建一个域名(或者甚至提供一个临时域名,例如,appengine 或端点)。但是,您可以将负载均衡器配置为使用您保留的静态 IP 地址,然后使用该 IP 的主机名运行 DNS。

    对于 LoadBalancer 服务,这是通过区域 IP 地址完成的,因此您需要先reserve the IP address,例如:

    gcloud compute addresses create my-service-ip --region us-central1
    

    (如果您愿意,还有一个 REST API,请参阅上面的链接)。请注意,Google 会为拥有未由 LoadBalancer 或 VM 实例使用的保留 IP 地址收取少量费用。

    接下来,配置您的 DNS(可能使用 Cloud DNS,但任何 DNS 提供商都可以)以将您想要的名称指向该 IP 地址。

    最后,当您create the loadbalancer 时,您需要将静态 IP 地址作为“loadBalancerIP”传递。我没有通过 JSON 完成此操作,但这里有一个 YAML 示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: backend-__ID__
    spec:
      selector:
        app: backend-__ID__
      ports:
      - port: 80
        targetPort: 8080
      type: LoadBalancer
      loadBalancerIP: "YOUR.IP.ADDRESS.HERE"
    

    您也可以阅读full documentation about using a domain name with your GKE cluster

    这也可以使用HTTP(S) loadbalancer via an Ingress,但技术略有不同,在这种情况下,您需要在元数据中添加“kubernetes.io/ingress.global-static-ip-name”注解您的入口,其值为您保留的静态 IP 地址的 name。在这种情况下,静态 IP 地址必须是全局的,而不是区域的。

    【讨论】:

    • 是的,这很好,但对于一个项目,我编辑了我的问题以获取更多详细信息
    • 假设您使用云 DNS 进行 DNS 服务,您可能可以使用 API 自动化所有这些。 Cloud Endpoints 可能也可以为您工作,但我还没有研究过。
    【解决方案2】:

    我找到了!

    使用反向 dns 查找,我发现 google 提供了这样的域:[LOADBALANCER_IP].bc.googleusercontent.com。

    反向dns查找站点示例:https://mxtoolbox.com/ReverseLookup.aspx

    【讨论】:

    • 天啊!!!!!!我花了几个小时做这件事,就这么简单
    猜你喜欢
    • 2018-09-17
    • 2016-07-17
    • 2016-05-16
    • 1970-01-01
    • 2019-11-28
    • 2019-09-14
    • 1970-01-01
    • 2019-06-22
    • 2022-09-29
    相关资源
    最近更新 更多