例如,我们在不同的命名空间部署了两个工作负载——foo 和 bar 。尽管我们知道 foo 永远不会与 bar 通信,反之亦然,但一个服务的端点将被包含在另一个服务的已发现端点列表中 。
文章插图
如果我们运行
istioctl proxy-config
命令,列出 foo 命名空间的 foo 工作负载可以看到的所有端点,你会注意到一个名为 bar 的服务条目:[root@k8scloude1 ~]# istioctl proxy-config endpoints deploy/foo.foo ENDPOINTSTATUSOUTLIER CHECKCLUSTER … 10.4.1.4:31400HEALTHYOKoutbound|31400||istio-ingressgateway.istio-system.svc.cluster.local 10.4.1.5:80HEALTHYOKoutbound|80||foo.foo.svc.cluster.local 10.4.2.2:53HEALTHYOKoutbound|53||kube-dns.kube-system.svc.cluster.local 10.4.4.2:8383HEALTHYOKoutbound|8383||istio-operator.istio-operator.svc.cluster.local 10.4.4.3:8080HEALTHYOKoutbound|80||istio-egressgateway.istio-system.svc.cluster.local 10.4.4.3:8443HEALTHYOKoutbound|443||istio-egressgateway.istio-system.svc.cluster.local 10.4.4.4:80HEALTHYOKoutbound|80||bar.bar.svc.cluster.local ...
如果 Istio 不断用集群中每个服务的信息来更新代理,即使这些服务是不相关的,我们可以想象这将如何拖累事情 。如果这听起来很熟悉,你可能知道已经有一个解决方案了——Sidecar 资源 。
我们将在后面的模块中讨论 Sidecar 资源 。
5.1 配置发现选择器发现选择器可以在 MeshConfig 中的 Mesh 层面上进行配置 。它们是一个 Kubernetes 选择器的列表,指定了 Istio 在向 sidecar 推送配置时观察和更新的命名空间的集合 。
就像 Sidecar 资源一样,
discoverySelectors
可以用来限制被 Istio 观察和处理的项目数量 。我们可以更新 IstioOperator 以包括
discoverySelectors
字段,如下所示: apiVersion: install.istio.io/v1alpha1 kind: IstioOperator metadata:namespace: istio-systemname: istio-demo spec:meshConfig:discoverySelectors:- matchLabels:env: test
上面的例子将 env=test
设置为一个匹配标签 。这意味着标有 env=test
标签的命名空间中的工作负载将被包含在 Istio 监控和更新的命名空间列表中 。如果我们给
foo
命名空间贴上 env=test
标签,然后列出端点,我们会发现现在配置中列出的端点没有那么多 。这是因为我们标注的唯一命名空间是 foo
命名空间,这也是 Istio 控制平面观察和发送更新的唯一命名空间 。[root@k8scloude1 ~]# istioctl proxy-config endpoints deploy/foo.foo ENDPOINTSTATUSOUTLIER CHECKCLUSTER 10.4.1.5:80HEALTHYOKoutbound|80||foo.foo.svc.cluster.local 127.0.0.1:15000HEALTHYOKprometheus_stats 127.0.0.1:15020HEALTHYOKagent unix://./etc/istio/proxy/SDSHEALTHYOKsds-grpc unix://./etc/istio/proxy/XDSHEALTHYOKxds-grpc
如果我们把命名空间 bar
也贴上标签,然后重新运行 istioctl proxy-config 命令,我们会发现 bar 端点显示为 foo
服务配置的一部分 。[root@k8scloude1 ~]# istioctl proxy-config endpoints deploy/foo.foo ENDPOINTSTATUSOUTLIER CHECKCLUSTER 10.4.1.5:80HEALTHYOKoutbound|80||foo.foo.svc.cluster.local 10.4.4.4:80HEALTHYOKoutbound|80||bar.bar.svc.cluster.local 127.0.0.1:15000HEALTHYOKprometheus_stats 127.0.0.1:15020HEALTHYOKagent unix://./etc/istio/proxy/SDSHEALTHYOKsds-grpc unix://./etc/istio/proxy/XDSHEALTHYOKxds-grpc
六.实战(k8s集群安装Istio 1.14版本)要安装 Istio,我们需要一个运行中的 Kubernetes 集群实例 。所有的云供应商都提供托管的 Kubernetes 集群,我们可以用它来安装 Istio 服务网格 。我们也可以在自己的电脑上使用以下任意平台在本地运行 Kubernetes集群: