注意,我们正在设置一个名为 CUSTOMER_SERVICE_URL
的环境变量,它指向我们接下来要部署的 customer
服务 。Web Frontend 使用这个 URL 来调用 Customers 服务 。
将上述 YAML
保存为 web-frontend.yaml
,并使用 kubectl apply -f web-frontend.yaml
创建部署和服务 。
现在我们可以部署 Customers 服务的 v1版本了 。注意我们是如何在 Pod 模板中设置 version: v1
标签的 。然而,该服务在其选择器中只使用app: customers
。这是因为我们将在 DestinationRule 中创建子集,这些子集将在选择器中应用额外的版本标签,使我们能够到达运行特定版本的 Pod 。
apiVersion: apps/v1 kind: Deployment metadata:name: customers-v1labels:app: customersversion: v1 spec:replicas: 1selector:matchLabels:app: customersversion: v1template:metadata:labels:app: customersversion: v1spec:containers:- image: gcr.io/tetratelabs/customers:1.0.0imagePullPolicy: Alwaysname: svcports:- containerPort: 3000 --- kind: Service apiVersion: v1 metadata:name: customerslabels:app: customers spec:selector:app: customersports:- port: 80name: httptargetPort: 3000
将上述内容保存为 customers-v1.yaml
,并使用 kubectl apply -f customers-v1.yaml
创建部署和服务 。
我们应该有两个应用程序的部署在运行:
$ kubectl get po NAMEREADYSTATUSRESTARTSAGE customers-v1-7857944975-5lxc82/2Running036s web-frontend-659f65f49-jz58r2/2Running03m38s
现在我们可以为 web-frontend
创建一个 VirtualService,并将其绑定到 Gateway 资源上:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: web-frontend spec:hosts:- '*'gateways:- gatewayhttp:- route:- destination:host: web-frontend.default.svc.cluster.localport:number: 80
将上述 YAML 保存为 web-frontend-vs.yaml
,并使用 kubectl apply -f web-frontend-vs.yaml
创建 VirtualService 。
现在我们可以在浏览器中打开 GATEWAY_URL
,并进入显示 Customers 服务中客户列表的 Web Frontend,如下图所示 。
文章插图
如果我们部署了 Customers 服务 v2 版本,我们在调用
http://customers.default.svc.cluster.local
,得到的回应将是随机的 。它们要么来自 Customers 服务的 v2 版本,要么来自 v1 版本 。我们需要为 Customers 服务创建 DestinationRule,并定义两个子集,代表 v1 和 v2 版本 。然后,我们可以创建一个 VirtualService,并将所有流量路由到 v1 版本的子集 。之后,我们可以在不影响现有服务的情况下部署 v2 版本的 Customers 服务 。
让我们从 DestinationRule 和两个子集开始:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata:name: customers spec:host: customers.default.svc.cluster.localsubsets:- name: v1labels:version: v1- name: v2labels:version: v2
将上述内容保存到 customers-dr.yaml
,并使用 kubectl apply -f customers-dr.yaml
创建 DestinationRule 。我们可以创建 VirtualService 并在目标中指定 v1子集:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: customers spec:hosts:- 'customers.default.svc.cluster.local'http:- route:- destination:host: customers.default.svc.cluster.localport:number: 80subset: v1
每当有请求被发送到 Kubernetes Customers 服务时,它将被路由到同一服务的 v1子集 。将上述 YAML 保存为
customers-vs.yaml
,并使用 kubectl apply -f customers-vs.yaml
创建 VirtualService 。现在我们已经准备好部署 v2 版的 Customers 服务了 。v2 版本返回与前一版本相同的客户列表,但它也包括城市名称 。
经验总结扩展阅读
- 破壁机玉米汁怎么榨才好喝
- 五行穿衣指南2023年9月24日 2023年穿衣五行颜色
- 玻璃自爆没掉下来怎么处理
- 2023年11月24日五行穿衣配色 今日幸运颜色讲究
- 2023年11月25日五行穿衣分享 穿什么颜色衣服好
- 2023年11月26日五行穿衣颜色搭配 今日招桃花幸运颜色
- 2023年11月27日五行穿衣颜色搭配 今日幸运颜色讲究
- 2023年11月28日五行穿衣配色 分享好运色穿衣搭配
- 2023年11月19日五行穿衣颜色搭配 今日幸运颜色查询
- 2023年11月20日五行穿衣查询 今日招桃花幸运颜色