首页 > 解决方案 > Kubernetes Ingress 子域 - Cloudfare 设置

问题描述

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

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

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

我也尝试关注这个网站,但没有运气。我尝试过其他 stackoverflow 链接和 cloudfare 发布的链接。但我仍然无法工作: https ://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes

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

LMK 如果需要更多信息。

入口.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

更新

入口.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”链接版本,现在我得到了这个(在我注意到之前):

在此处输入图像描述

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

新更新

因此,在 Cloudfare 仪表板上的“SSL/TLS”下。一旦我关闭它,我就可以毫无问题地访问我的子域。但是现在我如何让它完全运行呢?我的 Kubernetes 集群是否需要证书?

在此处输入图像描述

解决了

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

问题1:

在此处输入图像描述

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

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

问题2:

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

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

更新入口

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: /

标签: nginxkuberneteskubernetes-ingress

解决方案


解决了

所以这一切都解决了,它与两个小问题有关。链接 Cloudfare 页面

问题1:

在此处输入图像描述

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

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

问题2:

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

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

更新入口

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: /

推荐阅读