如何在 GKE ingress nginx 中设置域

How to setup a domain in GKE ingress nginx

我在 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 ingress controller
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

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

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

kubectl get svc -n ingress-nginx

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

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