Kubernetes 使用Minikube和AWS ECS构建本地测试环境

Kubernetes 使用Minikube和AWS ECS构建本地测试环境,kubernetes,dns,amazon-ecs,minikube,Kubernetes,Dns,Amazon Ecs,Minikube,我正在使用Kubernetes Minikube集群构建本地测试环境。“一些”后端API和数据库部署在集群内,每个API都有使用ingres创建的专用URL。除此之外,我在AWS ECS中部署了“所有”后端API,每个API都有一个Route53记录,前端连接到“.env”文件中的这些API。我想要实现的是,当我在集群外部的前端(React)上运行warn start时,前端应该首先检查本地Minikube集群中是否提供了服务,如果在集群中找不到服务,它将连接到AWS ECS中的服务。有没有办法

我正在使用
Kubernetes Minikube
集群构建本地测试环境。“一些”后端API和数据库部署在集群内,每个API都有使用
ingres
创建的专用URL。除此之外,我在AWS ECS中部署了“所有”后端API,每个API都有一个
Route53
记录,前端连接到“.env”文件中的这些API。我想要实现的是,当我在集群外部的前端(React)上运行
warn start
时,前端应该首先检查本地
Minikube
集群中是否提供了服务,如果在集群中找不到服务,它将连接到
AWS ECS
中的服务。有没有办法做到这一点

为了更好地说明,这是我的前端
.env
文件

SCHEDULE_API_URL = http://schedule.learning.com
DASHBOARD_API_URL = http://dashboard.learning.com
后端部署yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: schedule
  labels:
    name: schedule
spec:
  replicas: 1
  selector:
    matchLabels:
      app: schedule
  template:
    metadata:
      labels:
        app: schedule
    spec:
      containers:
      - name: schedule
        image: <image_name>
        ports:
        - containerPort: 8080
        imagePullPolicy: Never
      restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
  name: schedule-svc
  labels:
    app: schedule
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: schedule-ingress
 namespace: default
 annotations:
   kubernetes.io/ingress.class: "nginx"
   nginx.ingress.kubernetes.io/rewrite-target: /
   nginx.ingress.kubernetes.io/proxy-read-timeout: "12h"
   nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
 rules:
   - host: schedule.learning.com
     http:
       paths:
         - path: /
           pathType: Prefix
           backend:
             service:
               name: schedule-svc
               port:
                 number: 80

基于上述示例,当我在本地和集群外部运行前端时,它将连接到
调度API
在本地集群中,但是连接到ECS中的仪表板API,因为它在集群中找不到仪表板API

注:

  • 前端部署在集群外部
  • local
    集群中的API将与
    ECS
    集群中的API具有相同的URL,因此前端
    env
    无需修改
  • 即使
    Minikube
    集群部署在本地,它仍然是一个虚拟机

我认为,如果您使用双主机解决方案,则更通用的解决方案将是。这样,您就不需要对基础架构进行任何更改(只需要对名称进行一些调整)

在此解决方案中,您需要:

  • 使用
    $Minikube插件在
    Minikube
    中启用
    ingres
  • 创建
    LoadBalancer
    以在云环境中服务
  • 在云环境和Minikube中有2个部署
  • /etc/hosts
    添加
    $minikube ip
    地址的别名
  • 有两个服务,一个指向Minikube中的部署,第二个应该没有
    选择器
  • 为指向
    LoadBalancer
    IP的第二个服务创建
    Endpoint
配置

入口

终点

测试*

user@minikube-20:~$ curl -H "HOST: resource1.domain1.biz" http://192.168.49.2/first
Hello, world!
Version: 1.0.0
Hostname: first-deployment-5df6dc8d8b-mmx8c
user@minikube-20:~$ curl -H "HOST: resource2.domain2.biz" http://192.168.49.2/second
Hello, world!
Version: 1.0.0
Hostname: gke-deployment-85b75bf4f9-jgvhz
在此场景中,您还可以尝试使用

但是,如果您想实现您最初提到的,即创建
自动故障切换
,则需要干扰您的配置

您可以使用:

  • CoreDNS插件
    已调用
Plugin Alternate能够有选择地将查询转发到另一个上游服务器,具体取决于初始解析程序提供的错误结果

  • 某种类型的
    负载平衡器
    代理
    ,具有
    运行状况检查
    并请求重试,如中所示

看起来您在中提出了几乎相同的问题,该解决方案解决了您的问题还是该问题有所不同?问题略有不同。在这个问题中,前端部署在集群之外,这更方便开发人员进行本地测试。因此,通信将不再在集群内,而是1。前端外部和集群,2。前端和AWS。@yhshj这样做?谢谢,这正是我要找的!一个附带的问题是,有没有其他更好的方法/实践被普遍采用来为这样的大规模应用程序创建本地测试环境?
192.168.49.2 resource1.domain1.biz
192.168.49.2 resource2.domain2.biz
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - host: resource1.domain1.biz
    http:
      paths:
      - path: /first
        backend:
          serviceName: first-deployment
          servicePort: 8080
  - host: resource2.domain2.biz
    http:
      paths:
      - path: /second
        backend:
          serviceName: my-svc
          servicePort: 8080
apiVersion: v1
kind: Endpoints
metadata:
  name: my-svc
subsets:
  - addresses:
      - ip: 34.91.XX.27 
    ports:
      - port: 80
user@minikube-20:~$ curl -H "HOST: resource1.domain1.biz" http://192.168.49.2/first
Hello, world!
Version: 1.0.0
Hostname: first-deployment-5df6dc8d8b-mmx8c
user@minikube-20:~$ curl -H "HOST: resource2.domain2.biz" http://192.168.49.2/second
Hello, world!
Version: 1.0.0
Hostname: gke-deployment-85b75bf4f9-jgvhz