有没有办法获取 GKE 负载均衡器的域而不是 IP?

ham*_*awi 4 cookies dns load-balancing google-kubernetes-engine

编辑:我正在开发一个项目,每天以 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 !
Run Code Online (Sandbox Code Playgroud)

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

appx.mysite.com, or
mysite.com/appx
Run Code Online (Sandbox Code Playgroud)

结束编辑

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

{
    "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"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

这在谷歌云上给了我这个结果: 在此输入图像描述

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

那么有没有一种方法可以自动从 GKE 命名域中获取端点以从外部访问项目?

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

谢谢

ham*_*awi 10

我找到了!

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

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


rob*_*emb 9

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

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

gcloud compute addresses create my-service-ip --region us-central1
Run Code Online (Sandbox Code Playgroud)

(如果您愿意,还有一个 REST API,请参阅上面的链接)。请注意,对于负载均衡器或 VM 实例未使用的保留 IP 地址,Google 会收取少量费用。

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

最后,当您创建 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"
Run Code Online (Sandbox Code Playgroud)

您还可以阅读有关在 GKE 集群中使用域名的完整文档

这也可以通过 Ingress 使用 HTTP(S) 负载均衡器来实现,但技术略有不同,在这种情况下,您需要向您的入口的元数据,其值为您保留的静态 IP 地址的名称。在这种情况下,静态 IP 地址必须是全局的,而不是区域性的。