如何在 GKE ingress nginx 中设置域
How to setup a domain in GKE ingress nginx
我在 GKE 中有一个集群,它正在运行,一切似乎都在运行。如果我转发端口,我就能看到容器正在工作。
我无法通过 namecheap 设置我拥有的域。
这些是我遵循的步骤
- 在 Namecheap 中,我为域设置了自定义 dns
ns-cloud-c1.googledomains.com.
ns-cloud-c2.googledomains.com.
ns-cloud-c3.googledomains.com.
ns-cloud-c3.googledomains.com.
我使用字母 c
因为集群在 c
区域中(我不确定这是否正确)
- 因为我正在尝试设置为安全网站,所以我安装了 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
- 我应用了
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
- 我应用了入口
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
挑战正常进行。或者,您可以探索其他求解器。
我在 GKE 中有一个集群,它正在运行,一切似乎都在运行。如果我转发端口,我就能看到容器正在工作。
我无法通过 namecheap 设置我拥有的域。
这些是我遵循的步骤
- 在 Namecheap 中,我为域设置了自定义 dns
ns-cloud-c1.googledomains.com.
ns-cloud-c2.googledomains.com.
ns-cloud-c3.googledomains.com.
ns-cloud-c3.googledomains.com.
我使用字母 c
因为集群在 c
区域中(我不确定这是否正确)
- 因为我正在尝试设置为安全网站,所以我安装了 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
- 我应用了
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
- 我应用了入口
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
挑战正常进行。或者,您可以探索其他求解器。