简体   繁体   English

如何让 Google Cloud Run 使用 IPv4 而不是 IPv6 到容器应用程序

[英]How to make Google Cloud Run to use IPv4 instead of IPv6 to container app

I just set up a NodeJS based site on Google Cloud using the Cloud Run service.我刚刚使用 Cloud Run 服务在 Google Cloud 上建立了一个基于 NodeJS 的站点。

There are two DNS records: A (IPv4) and AAAA (IPv6).有两个 DNS 记录:A (IPv4) 和 AAAA (IPv6)。 Whenever I access the site using Chrome, my Chrome picks the IPv6 address and NodeJS app fails hard:每当我使用 Chrome 访问该站点时,我的 Chrome 都会选择 IPv6 地址并且 NodeJS 应用程序很难失败:

TypeError [ERR_INVALID_URL]: Invalid URL: http://2001:14ba:98ae:1700:****:****:****:****/
  at onParseError (internal/url.js:257:9)
  at new URL (internal/url.js:333:5)

Note: I censored the address注意:我审查了地址

If I force my browser to use the IPv4 address, then the site works fine.如果我强制浏览器使用 IPv4 地址,则该站点可以正常工作。

Is there a way to make the Cloud Run service use IPv4 to the container/app?有没有办法让 Cloud Run 服务对容器/应用程序使用 IPv4? I don't mind IPv6 at the client <-> Cloud Run level.我不介意client <-> Cloud Run级别的 IPv6。

My Cloud Run YAML looks like:我的 Cloud Run YAML 看起来像:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: xxx-dev-app-825af7f
  namespace: 'xxx'
  selfLink: /apis/serving.knative.dev/v1/namespaces/xxx/services/xxx-dev-app-825af7f
  uid: 2d787ef2-39a7-xxx-yyy-zzz
  resourceVersion: AAWfuzEBUYA
  generation: 5
  creationTimestamp: '2020-02-26T18:58:40.504717Z'
  labels:
    cloud.googleapis.com/location: europe-north1
  annotations:
    run.googleapis.com/client-name: gcloud
    serving.knative.dev/creator: pulumi@xxx.iam.gserviceaccount.com
    serving.knative.dev/lastModifier: xxx@cloudbuild.gserviceaccount.com
    client.knative.dev/user-image: gcr.io/xxx/app:4860b1e137457b0e42a1896d7b95e0348d8cd7e4
    run.googleapis.com/client-version: 279.0.0
spec:
  traffic:
  - percent: 100
    latestRevision: true
  template:
    metadata:
      name: xxx-dev-app-825af7f-00005-xoz
      annotations:
        run.googleapis.com/client-name: gcloud
        client.knative.dev/user-image: gcr.io/xxx/app:4860b1e137457b0e42a1896d7b95e0348d8cd7e4
        run.googleapis.com/client-version: 279.0.0
        autoscaling.knative.dev/maxScale: '1000'
    spec:
      timeoutSeconds: 900
      containerConcurrency: 80
      containers:
      - image: gcr.io/xxx/app:4860b1e137457b0e42a1896d7b95e0348d8cd7e4
        ports:
        - containerPort: 8080
        resources:
          limits:
            cpu: 1000m
            memory: 256Mi
          requests:
            cpu: 200m
            memory: 64Mi
status:
  conditions:
  - type: Ready
    status: 'True'
    lastTransitionTime: '2020-02-29T18:33:33.424Z'
  - type: ConfigurationsReady
    status: 'True'
    lastTransitionTime: '2020-02-29T18:33:28.264Z'
  - type: RoutesReady
    status: 'True'
    lastTransitionTime: '2020-02-29T18:33:33.424Z'
  observedGeneration: 5
  traffic:
  - revisionName: xxx-dev-app-825af7f-00005-xoz
    percent: 100
    latestRevision: true
  latestReadyRevisionName: xxx-dev-app-825af7f-00005-xoz
  latestCreatedRevisionName: xxx-dev-app-825af7f-00005-xoz
  address:
    url: https://xxx.run.app
  url: https://xxx.run.app

AFAIK, IPv6 is only supported at Global Load balancer only. AFAIK,仅全局负载均衡器支持 IPv6。 This load balancer proxied the connection and convert it to IPv4 for internal access into Google Network.Thereby, direct access to Cloud Run with IPv6 seems impossible.此负载均衡器代理连接并将其转换为 IPv4,以便内部访问 Google 网络。因此,使用 IPv6 直接访问 Cloud Run 似乎是不可能的。

However, things are in progress, especially around Load Balancing and it could solve your issue.但是,事情正在进行中,尤其是在负载平衡方面,它可以解决您的问题。 Maybe announcements at Cloud Next in April.可能会在 4 月的 Cloud Next 上发布公告。 Stay tuned!敬请关注!

For the connections between Cloud Run <=> user browser: You currently cannot disable the IPv6 stack.对于 Cloud Run <=> 用户浏览器之间的连接:您目前无法禁用 IPv6 堆栈。

(As Guillaume said, upcoming support for configurable Cloud HTTPS Load Balancer would solve your problem –in fact, IPv4 is the default for GCLB, and you explicitly need to configure an IPv6 address if you want IPv6 for your GCLB). (正如 Guillaume 所说,即将推出的对可配置云 HTTPS 负载均衡器的支持将解决您的问题——事实上,IPv4 是 GCLB 的默认设置,如果您想要为您的 GCLB 使用 IPv6,您明确需要配置一个 IPv6 地址)。

For connections between Cloud Run Service <=> Cloud Run Service: You should be fully control what IP you connect to, on the client side.对于 Cloud Run Service <=> Cloud Run Service 之间的连接:您应该在客户端完全控制您连接到的 IP。

For example, on the client side,例如,在客户端,

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM