Istio目标规则子集不起作用

时间:2019-01-15 11:13:27

标签: kubernetes istio

我的istio目的地规则不起作用,低于kiali错误

enter image description here 回显服务的VirtualService和目标规则:

我从另一个虚拟服务调用echo-svc:8080echo-svc:8080/v1时,无法在特定版本中进行路由。

当从另一个虚拟服务echo-svc:8080/v1echo-svc:8080发出请求时,两个子集都得到了响应。

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: echo-vsvc
spec:
  hosts:
  - "echo-svc.default.svc.cluster.local"
  http:
  - match:
    - uri:
        prefix: "/v1"
    route:
    - destination:
        host: echo-svc.default.svc.cluster.local
        subset: v1
  - route:
    - destination:
        host: echo-svc.default.svc.cluster.local
        subset: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: echo-destination
spec:
  host: echo-svc.default.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v0.1
  - name: v2
    labels:
      version: v0.2

如果我将回显服务附加到网关,然后通过istio-ingress向v1端点提供服务,我的所有请求都将路由到所需的k8s服务,但是如果是内部的(回显服务未附加到网关)的使节未将请求路由到所需的k8s服务。

更新:

 $ > k get pods --show-labels
NAME                              READY   STATUS    RESTARTS   AGE     LABELS
echo-deploy-v1-bdf758994-8f54b    2/2     Running   0          2m56s   app=echo-app,pod-template-hash=bdf758994,version=v0.1
echo-deploy-v2-68bb64684d-9gg2r   2/2     Running   0          2m51s   app=echo-app,pod-template-hash=68bb64684d,version=v0.2
frontend-v2-569c89dbd8-wfnc4      2/2     Running   2          12h     app=frontend,pod-template-hash=569c89dbd8,version=v2

2 个答案:

答案 0 :(得分:1)

发现我的错误,要使istio目标规则起作用,请特别注意以下几点:https://istio.io/docs/setup/kubernetes/spec-requirements/

我的错误是命名端口需要维修。从“ web”更新为“ http-web”对我有用。它的格式应为:<protocol>[-<suffix>]

---
apiVersion: v1
kind: Service
metadata:
  name: echo-svc
  labels:
    app: echo-app
spec:
  ports:
  - port: 80
    targetPort: 8080
    name: http-web
  selector:
    app: echo-app
---

答案 1 :(得分:0)

根据该错误,您的服务实例未标记为version: v0.1version: v0.2,这就是为什么目标规则找不到该子集的实例的原因。

通过执行以下操作来验证它们是否已标记:

kubectl get pods --show-labels

为了进行快速测试,您可以为它们加上标签:

kubectl label pod [pod_name] version=v0.1