如何在 GKE ingress nginx 中设置域

agu*_*ina 2 kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress gke-networking

我在 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.
Run Code Online (Sandbox Code Playgroud)

我使用这封信c是因为集群位于一个c区域中(我不确定这是否正确)

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

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)
  1. 我应用了ingress
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
Run Code Online (Sandbox Code Playgroud)

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

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

Fah*_*eem 5

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

kubectl get svc -n ingress-nginx
Run Code Online (Sandbox Code Playgroud)

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

证书管理器将创建入口资源来解决HTTPS01挑战。确保您的入口可以通过互联网访问,以应对HTTPS01挑战。或者,您可以探索其他求解器。