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

Is there a way to get a domain for GKE loadbalancer instead of an ip?

Edit :我正在开发一个项目,该项目每天以 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"
            }
        ]
    }
}

这在 google 云上给了我这个结果:

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

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

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

谢谢

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

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

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

(如果您愿意,还有一个 REST API,请参阅上面的 link)。请注意,Google 对负载均衡器或 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 地址的 名称。在这种情况下,静态 IP 地址必须是全局的,而不是区域的。

找到了!

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

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