如何在前后台服务之间使用Istio虚拟服务?

问题描述 投票:0回答:1

我是一个完全陌生的Istio,这个推销看起来非常令人兴奋。然而,我不能让它工作,这可能意味着我没有正确使用它.我的目标是实现2个服务之间的会话亲和力,这就是为什么最初我最终使用Istio。然而,我做了一个非常基本的测试,它似乎并没有工作:我有一个kubernetes演示应用,它作为一个前台服务,一个有状态服务,和一个无状态服务。我从浏览器访问前台服务,前台服务在有状态服务或无状态服务上发送请求,使用K8s服务名作为url。http:/api-statefulhttp:/api-stateless.

我想声明一个虚拟服务来拦截从前台服务向有状态服务发送的请求.我没有把它声明为网关,因为我理解的网关是在K8s集群的外部边界.我在Windows上用Istio 1.6的Docker。

我把我的yaml文件复制到下面.我想做的基本测试:将api-stateful的流量重路由到api-stateless,以验证虚拟服务被考虑在内。但是没有成功。你知道哪里出了问题吗?是虚拟服务的用法不对吗?我的Kiali控制台没有检测到任何问题的设置。

####################################################################
######################### STATEFUL BACKEND #########################
# Deployment for pocbackend containers, listening on port 3000
apiVersion: apps/v1
kind: Deployment
metadata:
  name: stateful-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: stateful-backend
      tier: backend
  template:
    metadata:
      labels:
        app: stateful-backend
        tier: backend
    spec:
       containers:
       - name: pocbackend
         image: pocbackend:2.0
         ports:
           - name: http
             containerPort: 3000
---
# Service for Stateful containers, listening on port 3000
apiVersion: v1
kind: Service
metadata:
  name: api-stateful
spec:
  selector:
    app: stateful-backend
    tier: backend
  ports:
  - protocol: TCP
    port: 3002
    targetPort: http
---
#####################################################################
######################### STATELESS BACKEND #########################
# Deployment for pocbackend containers, listening on port 3000
apiVersion: apps/v1
kind: Deployment
metadata:
  name: stateless-backend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: stateless-backend
      tier: backend
  template:
    metadata:
      labels:
        app: stateless-backend
        tier: backend
    spec:
      containers:
      - name: pocbackend
        image: pocbackend:2.0        
        ports:
           - name: http
             containerPort: 3000
 ---
# Service for Stateless containers, listening on port 3000
apiVersion: v1
kind: Service
 metadata:
  name: api-stateless
spec:
  selector:
    app: stateless-backend
    tier: backend
  ports:
  - protocol: TCP
    port: 3001
    targetPort: http
---
#############################################################
######################### FRONT END #########################
# deployment of the container pocfrontend listening to port 3500
apiVersion: apps/v1
kind: Deployment
metadata:
  name: front-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: frontend
      tier: frontend
  template:
    metadata:
      labels:
        app: frontend
        tier: frontend
    spec:
      containers:
      - name: pocfrontend
        image: pocfrontend:2.0               
        ports:
           - name: http
             containerPort: 3500      
---
# Service exposing frontend on node port 85
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  type: NodePort
  selector:
    app: frontend
    tier: frontend
  ports:
  - protocol: TCP
    port: 3500
    targetPort: http
    nodePort: 30000
---
##############################################################
############ ISTIO PROXY FOR API-STATEFUL SERVIC E############
##############################################################
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: api-stateful-proxy
spec:
  hosts:
  - api-stateful
  http: 
  - route:
      - destination:
          host: api-stateless
kubernetes proxy istio
1个回答
2
投票

正如评论中所提到的,可以通过以下方法来解决这个问题 DestinationRule 与粘性会话配置。

这方面的例子可以在istio中找到。文件:

LoadBalancerSettings

负载均衡策略适用于特定目的地。请参阅 Envoy 的负载均衡 文件 了解更多详情。

例如,下面的规则对所有流向评级服务的流量使用循环往复的负载均衡策略。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN

下面的示例为评级服务的基于散列的负载均衡器设置了粘性会话,使用用户cookie作为散列键。

 apiVersion: networking.istio.io/v1alpha3
 kind: DestinationRule
 metadata:
   name: bookinfo-ratings
 spec:
   host: ratings.prod.svc.cluster.local
   trafficPolicy:
     loadBalancer:
       consistentHash:
         httpCookie:
           name: user
           ttl: 0s
© www.soinside.com 2019 - 2024. All rights reserved.