【问题标题】:How to setup a domain in GKE ingress nginx如何在 GKE 入口 nginx 中设置域
【发布时间】:2021-05-19 12:48:47
【问题描述】:

我在 GKE 中有一个集群,它正在运行,一切似乎都在运行。如果我转发端口,我可以看到容器正在工作。

我无法从 namecheap 设置我拥有的域。

这些是我遵循的步骤

  1. 在 Namecheap 中,我为域设置了自定义 dns
ns-cloud-c1.googledomains.com.
ns-cloud-c2.googledomains.com.
ns-cloud-c3.googledomains.com.
ns-cloud-c3.googledomains.com.

我使用了字母c,因为集群位于c 区域中(我不确定这是否正确)

  1. 因为我试图设置为安全网站,所以我安装了 nginx 入口控制器
kubectl create clusterrolebinding cluster-admin-binding \
  --clusterrole cluster-admin \
  --user $(gcloud config get-value account)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml
  1. 我申请了issuer.yml
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
 name: letsencrypt-prod
 namespace: cert-manager
spec:
 acme:
   # The ACME server URL
   server: https://acme-v02.api.letsencrypt.org/directory
   # Email address used for ACME registration
   email: example@email.com
   # Name of a secret used to store the ACME account private key
   privateKeySecretRef:
     name: letsencrypt-prod
   # Enable the HTTP-01 challenge provider
   solvers:
   - http01:
       ingress:
         class:  nginx
  1. 我申请了入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: staging
  name: ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
    - hosts:
      - www.stagingmyappsrl.com
      - api.stagingmyappsrl.com
      secretName: stagingmyappsrl-tls
  rules:
  - host: wwwstaging.myappsrl.com
    http:
      paths:
      - backend:
          serviceName: myappcatalogo-svc
          servicePort: 80

  - host: apistaging.stagingmyappsrl.com
    http:
      paths:
      - backend:
          serviceName: myappnodeapi-svc
          servicePort: 80

如果我登录 GKE 网站,似乎一切都已创建并正常工作,但是当我尝试访问时,我得到 DNS_PROBE_FINISHED_NXDOMAIN

我不确定我是否遗漏了一个步骤,或者我是否设置了错误

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress gke-networking


    【解决方案1】:

    GKE 应该已经为您的入口服务创建了一个云负载平衡器。根据您的配置,LB 可以是内部的或外部的。您可以通过查看服务获取您的 LB 信息:

    kubectl get svc -n ingress-nginx
    

    在您的 DNS (namecheap) 中使用 LB 地址创建一个 CNAME 记录,这样就可以了。或者,如果您有 LB 的 IP 地址,请在您的 DNS 中创建一条 A 记录。

    Cert-manager 将创建一个入口资源来解决 HTTPS01 挑战。确保您的入口可通过 Internet 访问,以便 HTTPS01 挑战正常工作。或者,您可以探索其他求解器。

    【讨论】:

    • 感谢您的回答。我可以使用该命令查看 ingress-nginx 服务。我无法在 namecheap 中添加 cname,因为它只允许委派名称服务器,但是当我应用配置时,会在 gcp 中创建负载均衡器。一切似乎都在工作(绿色),但由于某种原因它没有
    • 我从未使用过 namecheap,但他们的文档确实表明他们接受 CNAME (namecheap.com/support/knowledgebase/article.aspx/9252/2208/…)。但是,如果没有,那么您将不得不在 GCP 中创建一个托管 DNS 区域,然后在那里创建相关的 CNAME 记录。如果您传入正确的主机头 (curl -H "Host: " ),您的网站应该可以通过 LB 地址访问。您需要修复 DNS 才能正常工作。
    • 感谢您的帮助,正如您指出的,我需要在 GCP 中创建 DNS,添加指向生成的 LB 的 A 记录并添加指向 A 记录的 CNAME。
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 2021-03-02
    • 2020-02-26
    • 1970-01-01
    • 2022-05-06
    • 1970-01-01
    • 2023-03-21
    • 2020-05-19
    相关资源
    最近更新 更多