非容器应用与K8s工作负载的服务网格化实践-2 基于ASM的Workload Entry实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Istio从1.6版本开始在流量管理中引入了新的资源类型Workload Entry,用以将虚拟机(VM)或者裸金属(bare metal)进行抽象,使其在网格化后作为与Kubernetes中的POD同等重要的负载,具备流量管理、安全管理、可视化等能力。通过WorkloadEntry可以简化虚拟机/裸金属的网格化配置过程。

Istio从1.6版本开始在流量管理中引入了新的资源类型Workload Entry,用以将虚拟机(VM)或者裸金属(bare metal)进行抽象,使其在网格化后作为与Kubernetes中的POD同等重要的负载,具备流量管理、安全管理、可视化等能力。通过WorkloadEntry可以简化虚拟机/裸金属的网格化配置过程。

1 VM与POD同等负载

首先,我们通过一个示例来展示如何使用Workload Entry实现VM与POD同等负载。示例的拓扑如下图所示,核心目标是将ack中的hello2 pod和ecs中的hello2 app视为同一个服务(hello2 service)下的两种负载。简单起见,本例没有配置流量转移,因此实验预期的结果是:从hello1发出的请求,交替发向hello2 pod和hello2 app。本例的流量始于hello1 POD内部,因此无需为hello1配置service,同理没有gateway等外部流量设施。

2-1-workload-demo.png

图中有三种颜色的线,橙色是ASM istioD和ASM sidecar之间的xDS通信(用途包括同步流量配置给各POD中的envoy等),黑色是物理链路,绿色虚线是逻辑链路。物理链路的视角是POD和VM,对应的逻辑视角是serviceentry、service和workloadentry。

示例(http_workload_demo)包含如下元素:

  • hello1 deployment(镜像http_springboot_v1)
  • hello2 deployment(镜像http_springboot_v2)
  • hello2 docker container(镜像http_springboot_v1)
  • hello2 service
  • hello2 serviceentry
  • hello2 workloadentry

实验特制镜像

镜像http_springboot-{version}是一个基于springboot开发的http服务(源代码在这里):

  • version不同返回的结果信息不同。这样设计的目的是在流量转移实验中展示不同路由的请求结果

    • v1返回Hello {input}
    • v2返回Bonjour {input}
    • v3返回Hola {input}
  • 环境变量HTTP_HELLO_BACKEND用于告诉当前服务是否有下游服务。这样设计的目的是在不借助其他组件的情况下,极简地展示链路信息;另外可以灵活地无限扩展链路长度,以演示和验证各种流量管理场景下的解决方案。

    • 如果没有下游,直接返回类似这样的信息:Hello eric(192.168.0.170)
    • 如果存在下游,则请求下游并将结果合并,返回信息类似这样:Hello eric(172.18.0.216)<-...<-Bonjour eric(172.18.1.97)

1.1 Setup

hello1 deployment示意如下,env定义了下游服务hello2-svc.pod-vm-hello.svc.cluster.local

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: pod-vm-hello
  name: hello1-deploy
...
    spec:
      containers:
        - name: hello-v1-deploy
          image: registry.cn-beijing.aliyuncs.com/asm_repo/http_springboot_v1:1.0.1
          env:
            - name: HTTP_HELLO_BACKEND
              value: "hello2-svc.pod-vm-hello.svc.cluster.local"
          ports:
            - containerPort: 8001

hello2 deploymenthello2 service示意如下,其中镜像使用了v2版本,以便区分vm中的hello2 app的返回结果。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: pod-vm-hello
  name: hello2-deploy-v2
...
    spec:
      containers:
        - name: hello-v1-deploy
          image: registry.cn-beijing.aliyuncs.com/asm_repo/http_springboot_v2:1.0.1
          ports:
            - containerPort: 8001
---
apiVersion: v1
kind: Service
metadata:
  namespace: pod-vm-hello
  name: hello2-svc
  labels:
    app: hello2-svc
spec:
  ports:
    - port: 8001
      name: http
  selector:
    app: hello2-deploy

hello2 serviceentry和hello2 workloadentry示意如下,ServiceEntry通过workloadSelector中定义的app: hello2-deploy找到相应的pod和workload entry。WorkloadEntry与VM(ecs实例)一一对应,address中定义了ecs的ip。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mesh-expansion-hello2-svc
  namespace: pod-vm-hello
spec:
  hosts:
  - hello2-svc.pod-vm-hello.svc.cluster.local
  location: MESH_INTERNAL
  ports:
  - name: http
    number: 8001
    protocol: HTTP
  resolution: STATIC
  workloadSelector:
    labels:
      app: hello2-deploy
---
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
  name: vm1
  namespace: pod-vm-hello
spec:
  address: 192.168.0.170
  labels:
    app: hello2-deploy
    class: vm
    version: v1

ecs中的hello2 app使用如下命令启动。启用--network host的目的是在hello2返回信息时使用ecs的ip。也可以不启用,这时返回的是docker container的ip,以便通过端口映射实现,在一个ecs示例中启动多个http_springboot实例。

docker run \
--rm \
--network host \
--name http_v1 \
registry.cn-beijing.aliyuncs.com/asm_repo/http_springboot_v1:1.0.1

完整的setup脚本参见setup-pod-vm.sh,不再冗述。示例实验环境搭建好后,我们进入验证环节。

1.2 流量验证

本例的流量始于hello1 POD内部,因此我们的验证环境是POD$hello1_pod中的hello-v1-deploy容器。

验证过程如下方脚本所示:

  • 获取并进入验证环境所在的容器
  • 在这个容器中分别向自身和hello2-svc.pod-vm-hello.svc.cluster.local发起请求
alias k="kubectl --kubeconfig $USER_CONFIG"

hello1_pod=$(k get pod -l app=hello1-deploy -n pod-vm-hello -o jsonpath={.items..metadata.name})

for i in {1..5}; do
  echo ">>> test hello1 -> hello2"
  k exec "$hello1_pod" -c hello-v1-deploy -n pod-vm-hello -- curl -s localhost:8001/hello/eric
  echo
  echo ">>> test hello2 directly"
  k exec "$hello1_pod" -c hello-v1-deploy -n pod-vm-hello -- curl -s hello2-svc.pod-vm-hello.svc.cluster.local:8001/hello/eric
  echo
done

我们期待的结果是,流量交替发向hello2 pod和hello2 app:

▶ sh sh/pod-vm-test.sh

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Hello eric(192.168.0.170)
>>> test hello2 directly
Hello eric(192.168.0.170)

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Bonjour eric(172.18.1.97)
>>> test hello2 directly
Bonjour eric(172.18.1.97)
...

到此,示例的验证完毕。通过这个示例,我们看到WorkloadEntry的引入,使vm中的非kubernetes容器应用可以非常容易地加入服务网格中,与POD成为同级别的负载。

在此基础上,我们很容易想到可以借助服务网格的流量转移,将ecs上的应用无损地迁移到POD中。接下来,我们继续基于这个示例来演示流量的切换。

2 从VM迁移到POD

首先我们在示例验证结果的基础上,删除hello2 pod,让从hello1发出的流量全部进入ecs中的hello2 app。这是模拟遗留应用网格化的初始状态。如下方左图所示。

接下来,我们把hello2 pod加入网格,即前序示例的状态。这是模拟遗留应用网格化的中间过程

最后,我们删除hello2 workloadentry,此时从hello1发出的流量将全部进入ack中的hello2 pod。这是模拟遗留应用完成网格化的终态。如下方右图所示。

2-2-workload-demo.png

2.1 流量验证

验证过程如下方脚本所示:

alias k="kubectl --kubeconfig $USER_CONFIG"
alias m="kubectl --kubeconfig $MESH_CONFIG"

verify_in_loop(){
  for i in {1..5}; do
  echo ">>> test hello1 -> hello2"
  k exec "$hello1_pod" -c hello-v1-deploy -n pod-vm-hello -- curl -s localhost:8001/hello/eric
  echo
  echo ">>> test hello2 directly"
  k exec "$hello1_pod" -c hello-v1-deploy -n pod-vm-hello -- curl -s hello2-svc.pod-vm-hello.svc.cluster.local:8001/hello/eric
  echo
done
}

hello1_pod=$(k get pod -l app=hello1-deploy -n pod-vm-hello -o jsonpath={.items..metadata.name})

echo "1 delete pod and test serviceentry only routes to workloadentry:"
k delete -f yaml/hello2-deploy-v2.yaml
verify_in_loop

echo "2 add pod and test serviceentry routes to pod and workloadentry:"
k apply -f yaml/hello2-deploy-v2.yaml
verify_in_loop

echo "3 delete workloadentry and test serviceentry only routes to pod:"
m delete workloadentry vm1 -n pod-vm-hello
verify_in_loop

验证结果如下所示:

  • 第一步删除pod后,流量全部进入ecs中的hello2 app
  • 第二步加入pod后,流量交替发送到ack中的hello2 pod和ecs中的hello2 app
  • 第三步删除workloadentry后,流量全部进入ack中的hello2 pod
1 delete pod and test serviceentry only routes to workloadentry:d_demo/sh/migrate-test.sh
deployment.apps "hello2-deploy-v2" deleted

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Hello eric(192.168.0.170)
>>> test hello2 directly
Hello eric(192.168.0.170)

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Hello eric(192.168.0.170)
>>> test hello2 directly
Hello eric(192.168.0.170)
...

2 add pod and test serviceentry routes to pod and workloadentry:
deployment.apps/hello2-deploy-v2 created

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Hello eric(192.168.0.170)
>>> test hello2 directly
Hello eric(192.168.0.170)

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Bonjour eric(172.18.1.98)
>>> test hello2 directly
Bonjour eric(172.18.1.98)
...

3 delete workloadentry and test serviceentry only routes to pod:
workloadentry.networking.istio.io "vm1" deleted

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Bonjour eric(172.18.1.98)
>>> test hello2 directly
Bonjour eric(172.18.1.98)

>>> test hello1 -> hello2
Hello eric(172.18.0.216)<-Bonjour eric(172.18.1.98)
>>> test hello2 directly
Bonjour eric(172.18.1.98)
...

到此,从VM迁移到POD验证完毕。因为本例的核心是展示从VM迁移到POD的可能性,只演示了迁移过程的3个边界状态,没有展示通过virtualservice进行平滑切流,从而实现流量无损的迁移。接下来的流量管理示例,virtualservice将作为一号位闪亮登场。

3 VM流量管理

通过前两节的展示我们看到:使用``Workload Entry可以方便地将非容器应用加入服务网格,并与POD同等待遇;此外,可以最终使用POD替代全部非容器应用。但是,迁移与否以及迁移的节奏依赖于诸多因素。在没有启程迁移时,依然可以通过Workload Entry让非容器应用享受到一定的网格化能力。接下来的示例将展示流量迁移。

示例的拓扑如下图所示,核心目标是将ecs中的hello2 app的多个实例视为同一个服务下的负载,通过virtualservice配置实现不同实例的流量配比。这个实验将完整地展示入口网关和流量转移,流量从本地向公网发起,经入口网关到hello1,再由hello1向ecs中的三个hellp2 app发起请求,流量配比为:30%:60%:10%。

2-3-workload-traffic-demo.png

示例(http_workload_traffic_demo)包含如下元素:

  • hello1 deployment(镜像http_springboot_v1)
  • hello2 docker containers(镜像http_springboot_v1/http_springboot_v2/http_springboot_v3)
  • 入口网关:istio-ingressgateway
  • 入口流量配置:gateway/virtualservice
  • hello1流量配置:hello1 service/hello1 virtualservice/hello1 destinationrule
  • hello2流量配置:hello2 service/hello2 virtualservice/hello2 destinationrule
  • hello2 serviceentry/hello2 workloadentry

3.1 入口流量配置

首先登录ASM管控台,配置入口网关服务,增加8002端口如下所示:

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  ports:
  ...
    - name: http-workload
      port: 8002
      targetPort: 8002

2-4-istio-ingressgateway.png

为入口网关配置入口流量示意如下。名称为external-hello-gateway的Gateway将spec.selector.istio定义为入口网关的名称ingressgateway,名称为gateway-vs的VirtualService将spec.gateways定义为external-hello-gateway。将请求到8002端口的全部流量转移到hello1-svc

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  namespace: external-hello
  name: external-hello-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 8002
        name: http
        protocol: HTTP
      hosts:
        - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: external-hello
  name: gateway-vs
spec:
  hosts:
    - "*"
  gateways:
    - external-hello-gateway
  http:
    - match:
        - port: 8002
      route:
        - destination:
            host: hello1-svc

hello1-svc将流量转移到8001,本例中的负载(POD/VM)均通过8001对外提供服务。

spec:
  ports:
    - name: http
      port: 8002
      targetPort: 8001
      protocol: TCP

3.2 hello2流量转移配置

接下来,我们重点关注hello2的流量配置。在hello2 destinationrule中定义了hello2的3个subsets,每个subset通过labels与对应的负载关联。在hello2 virtualservice中定义了请求路径规则:路径前缀为/hello的请求,会按照3:6:1的比例转移到v1/v2/v3对应的负载端点上。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  namespace: external-hello
  name: hello2-dr
spec:
  host: hello2-svc
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2
    - name: v3
      labels:
        version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: external-hello
  name: hello2-vs
spec:
  hosts:
    - hello2-svc
  http:
    - name: http-hello-route
      match:
        - uri:
            prefix: /hello
      route:
        - destination:
            host: hello2-svc
            subset: v1
          weight: 30
        - destination:
            host: hello2-svc
            subset: v2
          weight: 60
        - destination:
            host: hello2-svc
            subset: v3
          weight: 10

我们通过执行aliyun cli命令,为ASM实例增加hello2 service/hello2 serviceentry/hello2 workloadentry。命令如下:

aliyun servicemesh AddVmAppToMesh \
  --ServiceMeshId $MESH_ID \
  --Namespace external-hello \
  --ServiceName hello2-svc \
  --Ips "$VM_PRI_1","$VM_PRI_2","$VM_PRI_3" \
  --Ports http:8001 \
  --Labels app=hello-workload
  • servicemesh:是ASM集成到aliyun cli的子命令
  • ServiceMeshId参数用来指定ASM实例ID
  • Namespace参数用来指定命名空间
  • ServiceName参数用来指定服务名称
  • Ips参数用来指定VM的IP,本例使用3个ecs节点
  • Ports参数用来指定服务端口,使用冒号分割,冒号前为协议名称,冒号后为服务端口号
  • Labels参数用来指定WorkloadEntry的labels和ServiceEntry的spec.workloadSelector.labels,这个参数值是两者关联的桥梁。

创建完毕后可以通过如下命令查询ASM实例下的VM网格化信息:

aliyun servicemesh GetVmAppMeshInfo --ServiceMeshId $MESH_ID

自动生成的WorkloadEntry默认是没有version标签的,为了展示流量转移,我们需要分别为3个WorkloadEntry增加与上述DestinationRule中配置相应的标签信息。

登录ASM管控台,在控制平面中找到指定的WorkloadEntry并进行编辑。

2-5-asm-workloadentry.png

示意如下:

spec:
  address: 192.168.0.170
  labels:
    app: hello-workload
    version: v1

最后,我们在3个ecs节点上分别启动hello2.示意如下:

# vm/ssh1.sh
docker run \
--rm \
--network host \
--name http_v1 \
registry.cn-beijing.aliyuncs.com/asm_repo/http_springboot_v1:1.0.1
# vm/ssh2.sh
docker run \
--rm \
--network host \
--name http_v2 \
registry.cn-beijing.aliyuncs.com/asm_repo/http_springboot_v2:1.0.1
# vm/ssh3.sh
docker run \
--rm \
--network host \
--name http_v3 \
registry.cn-beijing.aliyuncs.com/asm_repo/http_springboot_v3:1.0.1

3.3 流量验证

实验环境搭建完毕后,通过验证脚本test_traffic_shift.sh进行验证:

  • 获取入口网关IP
  • 循环调用8002端口并根据响应信息统计路由
IP=$(k -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

for i in {1..100}; do
  resp=$(curl -s "$IP":8002/hello/eric)
  echo "$resp" >>test_traffic_shift_result
done

echo "expected 30%(Hello eric)-60%(Bonjour eric)-10%(Hola eric):"
sort test_traffic_shift_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

验证结果如下:

Test route n a loop
expected 30%(Hello eric)-60%(Bonjour eric)-10%(Hola eric):
  61 Hello eric(172.18.1.99)<-Bonjour eric(192.168.0.171)
  31 Hello eric(172.18.1.99)<-Hello eric(192.168.0.170)
   8 Hello eric(172.18.1.99)<-Hola eric(192.168.0.172)

到此,VM流量管理验证完毕。我们看到,通过配置WorkloadEntry将VM加入到网格中,然后再为其增加与POD配置方式一致的DestinationRuleVirtualService,即可实现服务网格对VM上应用流量转移的配置管理。

4 尚未网格化

本篇的示例展示了使用WorkloadEntry将虚拟机/裸金属上的应用加入服务网格的过程,目的是以WorkloadEntry为主视角,展示WorkloadEntry的作用和使用方法。

WorkloadEntry的引入解决了从网格内的POD向VM中的应用请求的流量管理。但是反方向的请求单靠WorkloadEntry是不能解决的,因为VM中的应用无法找到网格内的POD。到目前为止,我们的VM还没有真正意义地实现网格化,只有完全实现网格化,VM内才能为应用提供sidecar,进而通过POD对应的service,将VM应用的请求路由到POD。

接下来的两篇将分别以http/grpc协议来展示真正意义的网格化VM与POD之间的相互通信。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
271 146
|
3月前
使用 ASM 对集群外部服务进行熔断
熔断是一种流量管理策略,用于系统故障或超载时保护系统。ASM 支持集群内外服务的熔断配置,通过 sidecar 自动完成,无需修改应用。本文介绍如何部署应用并配置熔断规则,验证熔断效果。
107 0
|
7月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
8月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
8月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
8月前
|
Kubernetes 安全 数据安全/隐私保护
容器云服务是什么?
容器云基于容器技术,实现应用及其依赖的标准化封装,支持跨平台快速部署和高效管理。与传统虚拟机相比,容器共享宿主机操作系统内核,资源占用少、启动快,但隔离性稍弱。Docker Engine通过Dockerfile定义应用环境并生成容器镜像,适合单机场景;Kubernetes作为行业标准编排工具,支持自动扩缩容和服务发现,适用于大规模集群管理;OpenShift提供企业级全流程平台,满足合规要求;Rancher简化多云环境下的Kubernetes管理;CoreOS Tectonic专注于安全性,适用于高安全需求领域。容器云正朝着无服务器化、智能运维和边缘协同等方向发展。
630 2
|
9月前
|
人工智能 监控 安全
容器化AI模型的安全防护:构建可信的AI服务
在AI模型广泛应用的背景下,容器化AI模型的安全防护至关重要。主要安全威胁包括数据窃取、模型窃取、对抗样本攻击和模型后门攻击等。为应对这些威胁,需采取多层次防护措施:容器安全(如使用可信镜像、限制权限)、模型安全(如加密、水印)、数据安全(如加密、脱敏)和推理安全(如输入验证、异常检测)。此外,利用开源工具如Anchore Engine、Falco和ART等,可进一步加强防护。遵循安全开发生命周期、最小权限原则和深度防御等最佳实践,确保AI服务的安全性和可信度。
|
9月前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
9月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
9月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多
    下一篇
    oss云网关配置