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
注:
- 前端部署在集群外部
集群中的API将与local
集群中的API具有相同的URL,因此前端ECS
无需修改env
- 即使
集群部署在本地,它仍然是一个虚拟机Minikube
- 使用
$Minikube插件在
中启用Minikube
ingres
- 创建
以在云环境中服务LoadBalancer
- 在云环境和Minikube中有2个部署
- 向
添加/etc/hosts
地址的别名$minikube ip
- 有两个服务,一个指向Minikube中的部署,第二个应该没有
选择器
- 为指向
IP的第二个服务创建LoadBalancer
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插件
- 某种类型的
或负载平衡器
,具有代理
并请求重试,如中所示运行状况检查
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