二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14( 四 )


例如,我们在不同的命名空间部署了两个工作负载——foo 和 bar 。尽管我们知道 foo 永远不会与 bar 通信,反之亦然,但一个服务的端点将被包含在另一个服务的已发现端点列表中 。

二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14

文章插图
如果我们运行 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集群: