0

问题:我想在名为“ORDER_ID”的请求标头上实现粘性。因此,如果特定的订单请求应该由 Kubernetes 中的特定 pod 提供服务。但在我的情况下,它不起作用,因为请求并没有坚持到特定的 pod,而是被分发到不同的 pod。

这就是我安装大使的方式:

  1. helm repo 添加数据线https://www.getambassador.io
  2. kubectl 创建命名空间大使
  3. 掌舵安装大使--命名空间大使数据线/大使

以下是 yaml 文件:

部署.yml

apiVersion: apps/v1
kind: Deplyment
metadata:
  name: order-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: order-service
strategy:
  type: RollingUpdate
template:
  metadata:
    labels:
      app: order-service
  spec:
    containers:
      - name: orderservice
        image: xyz.io/orderservice
        imagePullPolicy: Always
        ports:
          - containerPort: 3000
           

2 服务.yml

apiVersion: v1
kind: Service
metadata:
  name: order-service
spec:
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
  selector:
    app: order-service

3 映射.yml

apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  name: ambassador-backend
spec:
  prefix: /
  service: order-service:3000
  resolver: endpoint
  load_balancer:
    policy: least_request
    header: ORDER_ID

测试 -

curl --insecure --location --request GET 'http://.../backend/orders' --header 'Content-Type: application/json' --header 'ORDER_ID: 1234'

有什么我遗漏或做错了什么吗?

4

1 回答 1

0

为了设置粘性,它需要入口控制器通过大使负载均衡器将请求路由到订单服务。端点级服务发现也需要 EndpointResolver,该服务发现用于映射以覆盖大使的配置。

缺失的部分是——

  1. 入口.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: ambassador
  name: order-service-ingress
spec:
  rules:
    - http:
      paths:
        - path: /v1/orders/*
          backend:
            serviceName: order-service
            servicePort: 4000
  1. 端点解析器.yml
apiVersion: getambassador.io/v2
kind: KubernetesEndpointResolver
metadata:
  name: endpoint
于 2020-10-12T07:08:50.683 回答