Kubernetes Ingress 子域 - Cloudfare 设置

Kubernetes Ingress Subdomain - Cloudfare Setup

所以我有自己的网站 运行ning,我想将我的一项服务迁移到我实际网站的子域下的当前集群,但我遇到了一些麻烦。

我有一个从 NameCheap 购买的网站,我使用 Cloudfare 处理所有 DNS 内容。所以一切都设置正确。我似乎不知道该怎么做才能让我的子域网站真正运行。

我已尝试添加“A”和“CNAME”记录,但仍然无法正常工作。

我也试过关注这个网站,但没有成功。我已经尝试过 cloudfare 发布的其他 Whosebug links 和 links。但是我仍然无法正常工作: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes

我的服务也运行没问题。我的 pods 和部署也很好,没有错误,我的网站已经 运行 正在另一个 link 上运行,我正在删除它以节省资金。 www.ecoders.ca。为了迁移我的服务,我所做的只是将内容添加到我的入口并将所有内容重新部署到我当前的集群。在我当前的集群上,我使用的是 NGINX。

LMK 如果需要更多信息。

Ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
#    nginx.ingress.kubernetes.io/rewrite-target: /
  name: ingress
spec:
  rules:
   - host: www.foo.com
     http:
       paths:
         - backend:
             serviceName: nk-webapp-service
             servicePort: 80
           path: /
         - backend:
             serviceName: stockapp-service
             servicePort: 80
           path: /stock
   - host: www.bar.foo.com <----------- this does not work
     http:
       paths:
         - backend:
             serviceName: ecoders-webapi-service
             servicePort: 80
           path: /


Cloudfare 设置

CNAME -> www -> foo.com  
CNAME -> bar -> foo.com  
A -> foo.com -> IP ADDRESS  

服务设置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecoders-webapi
spec:
  replicas: 1
  selector:
    matchLabels:
      name: ecoders-webapi
  template:
    metadata:
      labels:
        name: ecoders-webapi
    spec:
      containers:
        - name: webapi
          image: astronik/webservice:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

apiVersion: v1
kind: Service
metadata:
  name: ecoders-webapi-service
spec:
  type: ClusterIP
  ports:
    - name: http
      port: 80
      targetPort: 8080
  selector:
    name: ecoders-webapi

已更新

Ingress.yaml

   - host: www.bar.foo.com
     http:
       paths:
         - backend:
             serviceName: ecoders-webapi-service
             servicePort: 80
           path: /
   - host: bar.foo.com
     http:
       paths:
         - backend:
             serviceName: ecoders-webapi-service
             servicePort: 80
           path: /

我也添加了一个“www”link 版本,现在我得到了这个(在我注意到之前):

这跟TLS/SSL有关系吗?意思是我的子域没有证书?

新更新

所以在 Cloudfare 仪表板上的“SSL/TLS”下。一旦我关闭它,我就可以毫无问题地访问我的子域。但是现在我怎样才能把它变成 运行 呢?我的 kubernetes 集群需要证书吗?

已解决

所以一切都解决了,它与 2 个小问题有关。

问题一:

基本上我需要更改我的 DNS 设置添加 www.正在添加另一个子域。我删除了之前创建的 2 个 CNAME 并执行了此操作。

A -> bar -> 10.0.0.0 
A -> foo.com -> 10.0.0.0 

问题二:

需要更新我的入口以删除此行

nginx.ingress.kubernetes.io/from-to-www-redirect: "true"

已更新 Ingress

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: ingress
spec:
  rules:
   - host: foo.com
     http:
       paths:
         - backend:
             serviceName: nk-webapp-service
             servicePort: 80
           path: /
         - backend:
             serviceName: stockapp-service
             servicePort: 80
           path: /stock
   - host: bar.foo.com
     http:
       paths:
         - backend:
             serviceName: ecoders-web-service
             servicePort: 80
           path: /

已解决

所以一切都解决了,它与 2 个小问题有关。 Link Cloudfare Page

问题一:

基本上我需要更改我的 DNS 设置添加 www.正在添加另一个子域。我删除了之前创建的 2 个 CNAME 并执行了此操作。

A -> bar -> 10.0.0.0 
A -> foo.com -> 10.0.0.0 

问题二:

需要更新我的入口以删除此行

nginx.ingress.kubernetes.io/from-to-www-redirect: "true"

已更新 Ingress

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: ingress
spec:
  rules:
   - host: foo.com
     http:
       paths:
         - backend:
             serviceName: nk-webapp-service
             servicePort: 80
           path: /
         - backend:
             serviceName: stockapp-service
             servicePort: 80
           path: /stock
   - host: bar.foo.com
     http:
       paths:
         - backend:
             serviceName: ecoders-web-service
             servicePort: 80
           path: /