首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在匹配主机上找不到Istio DestinationRule子集标签

在匹配主机上找不到Istio DestinationRule子集标签
EN

Stack Overflow用户
提问于 2020-02-20 21:37:30
回答 1查看 2K关注 0票数 1

我正在尝试配置一个Istio VirtialService / DestinationRule,以便将标记为datacenter=chi5datacenter=chi5对服务的调用路由到标记为datacenter=chi5datacenter=chi5上的grpc服务器。

我在运行Kubernetes 1.15的集群上安装了Istio1.4。

route,而不是,它在istio-sidecar配置中为chi5子集创建,并且流量在每个服务端点之间被路由,而不管pod标签如何。

Kiali报告了DestinationRule配置中的一个错误:“在任何匹配的主机中都找不到这个子集的标签”。

我是否误解了这些Istio流量管理对象的功能,还是在我的配置中出现了错误?

我相信我的吊舱的标签是正确的:

代码语言:javascript
复制
$ (dev) kubectl get pods -n istio-demo --show-labels
NAME                            READY   STATUS    RESTARTS   AGE    LABELS
ticketclient-586c69f77d-wkj5d   2/2     Running   0          158m   app=ticketclient,datacenter=chi6,pod-template-hash=586c69f77d,run=client-service,security.istio.io/tlsMode=istio
ticketserver-7654cb5f88-bqnqb   2/2     Running   0          158m   app=ticketserver,datacenter=chi5,pod-template-hash=7654cb5f88,run=ticket-service,security.istio.io/tlsMode=istio
ticketserver-7654cb5f88-pms25   2/2     Running   0          158m   app=ticketserver,datacenter=chi6,pod-template-hash=7654cb5f88,run=ticket-service,security.istio.io/tlsMode=istio

我的k8s服务对象上的端口名正确地以grpc协议作为前缀:

代码语言:javascript
复制
$ (dev) kubectl describe service -n istio-demo ticket-service
Name:              ticket-service
Namespace:         istio-demo
Labels:            app=ticketserver
Annotations:       <none>
Selector:          run=ticket-service
Type:              ClusterIP
IP:                10.234.14.53
Port:              grpc-ticket  10000/TCP
TargetPort:        6001/TCP
Endpoints:         10.37.128.37:6001,10.44.0.0:6001
Session Affinity:  None
Events:            <none>

我已经将以下Istio对象部署到Kubernetes:

代码语言:javascript
复制
Kind:         VirtualService
Name:         ticket-destinationrule
Namespace:    istio-demo
Labels:       app=ticketserver
Annotations:  <none>
API Version:  networking.istio.io/v1alpha3
Kind:         DestinationRule
Spec:
  Host:  ticket-service.istio-demo.svc.cluster.local
  Subsets:
    Labels:
      Datacenter:  chi5
    Name:          chi5
    Labels:
      Datacenter:  chi6
    Name:          chi6
Events:            <none>
---
Name:         ticket-virtualservice
Namespace:    istio-demo
Labels:       app=ticketserver
Annotations:  <none>
API Version:  networking.istio.io/v1alpha3
Kind:         VirtualService
Spec:
  Hosts:
    ticket-service.istio-demo.svc.cluster.local
  Http:
    Match:
      Name:  ticket-chi5
      Port:  10000
      Source Labels:
        Datacenter:  chi5
    Route:
      Destination:
        Host:    ticket-service.istio-demo.svc.cluster.local
        Subset:  chi5
Events:          <none>
EN

回答 1

Stack Overflow用户

发布于 2020-02-21 09:44:00

我已经复制了你的问题与2尼吉斯荚。

您想要的东西可以用sourceLabel实现,请查看下面的示例,我认为它解释了所有的事情。

首先,我制作了2个ubuntu吊舱,一个带有标签应用:ubuntu,一个没有任何标签。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: ubu2
  labels:
    app: ubuntu
spec:
  containers:
  - name: ubu2
    image: ubuntu
    command: ["/bin/sh"]
    args: ["-c", "apt-get update && apt-get install curl -y && sleep 3000"]
代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: ubu1
spec:
  containers:
  - name: ubu1
    image: ubuntu
    command: ["/bin/sh"]
    args: ["-c", "apt-get update && apt-get install curl -y && sleep 3000"]

然后是两个有服务的部署。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
spec:
  selector:
    matchLabels:
      run: nginx1
  replicas: 1
  template:
    metadata:
      labels:
        run: nginx1
        app: frontend
    spec:
      containers:
      - name: nginx1
        image: nginx
        ports:
        - containerPort: 80
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh", "-c", "echo Hello nginx1 > /usr/share/nginx/html/index.html"]
代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx2
spec:
  selector:
    matchLabels:
      run: nginx2
  replicas: 1
  template:
    metadata:
      labels:
        run: nginx2
        app: frontend
    spec:
      containers:
      - name: nginx2
        image: nginx
        ports:
        - containerPort: 80
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh", "-c", "echo Hello nginx2 > /usr/share/nginx/html/index.html"]
代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: frontend
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: frontend

另一件事是带有mesh网关的虚拟服务,所以它只在网格中工作,有2次匹配,1次与sourceLabel匹配,从使用app的荚: ubuntu标签到带有v1子集的nginx,另一次匹配到带有v2子集的nginx。

代码语言:javascript
复制
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nginxvirt
spec:
  gateways:
  - mesh
  hosts:
  - nginx.default.svc.cluster.local
  http:
  - name: match-myuid
    match:
    - sourceLabels:
        app: ubuntu
    route:
    - destination:
        host: nginx.default.svc.cluster.local
        port:
          number: 80
        subset: v1
  - name: default
    route:
    - destination:
        host: nginx.default.svc.cluster.local
        port:
          number: 80
        subset: v2

最后一件事是DestinationRule,它从虚拟服务中提取子集,并将其发送到带有nginx1或nginx2标签的适当的nginx2中。

代码语言:javascript
复制
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: nginxdest
spec:
  host: nginx.default.svc.cluster.local
  subsets:
  - name: v1
    labels:
      run: nginx1
  - name: v2
    labels:
      run: nginx2

kubectl获得吊舱--展示标签

代码语言:javascript
复制
NAME                      READY   STATUS    RESTARTS   AGE     LABELS
nginx1-5c5b84567c-tvtzm   2/2     Running   0          23m     app=frontend,run=nginx1,security.istio.io/tlsMode=istio
nginx2-5d95c8b96-6m9zb    2/2     Running   0          23m     app=frontend,run=nginx2,security.istio.io/tlsMode=istio
ubu1                      2/2     Running   4          3h19m   security.istio.io/tlsMode=istio
ubu2                      2/2     Running   2          10m     app=ubuntu,security.istio.io/tlsMode=istio

结果来自ubuntu

带标签的Ubuntu

代码语言:javascript
复制
curl nginx/
Hello nginx1

Ubuntu无标签

代码语言:javascript
复制
curl nginx/
Hello nginx2

如果能帮上忙就告诉我。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60328890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档