istio 理解1

Istio 中负责流量管理的核心组件是:

  1. 控制平面的 Pilot:负责管理 Service Mesh 中的所有 Envoy 实例,制定服 务的规范模型,分配路由规则。
  2. 数据平面的 Envoy:负责路由、负载均衡和上报遥测信息。

检查下当前 Service Mesh(注入到pod中的envoy 代理)

$ istioctl proxy-status
NAME                                                   CDS        LDS        EDS        RDS          PILOT                      VERSION
details-v1-6fc55d65c9-glms5.istio-test                 SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
istio-egressgateway-557dcf8d8-7v48g.istio-system       SYNCED     SYNCED     SYNCED     NOT SENT     istiod-774777b79-b6qg5     1.5.2
istio-ingressgateway-6489d9556d-dnx6m.istio-system     SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
nginx-649b6985f8-nwfxv.default                         SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
nginx-649b6985f8-q4v78.default                         SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
nginx-649b6985f8-x87tm.default                         SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
productpage-v1-7f44c4d57c-8g2qw.istio-test             SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
prometheus-dfd976959-w9jkl.istio-system                SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
ratings-v1-6f855c5fff-ztvh7.istio-test                 SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
reviews-v1-54b8794ddf-llk45.istio-test                 SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
reviews-v2-c4d6568f9-jx8pn.istio-test                  SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2
reviews-v3-7f66977689-qnnvw.istio-test                 SYNCED     SYNCED     SYNCED     SYNCED       istiod-774777b79-b6qg5     1.5.2

Istio 创建的所有的 Kubernetes CRD(自定义资源类型)根据 API 的域名看到所有的 CRD 分为四类:
config:配置分发与遥测

$ kubectl get customresourcedefinition|grep istio.io|grep config
adapters.config.istio.io                   2020-05-06T06:14:27Z
attributemanifests.config.istio.io         2020-05-06T06:14:27Z
clusterrbacconfigs.rbac.istio.io           2020-05-06T06:14:27Z
handlers.config.istio.io                   2020-05-06T06:14:27Z
httpapispecbindings.config.istio.io        2020-05-06T06:14:27Z
httpapispecs.config.istio.io               2020-05-06T06:14:28Z
instances.config.istio.io                  2020-05-06T06:14:28Z
quotaspecbindings.config.istio.io          2020-05-06T06:14:29Z
quotaspecs.config.istio.io                 2020-05-06T06:14:29Z
rbacconfigs.rbac.istio.io                  2020-05-06T06:14:29Z
rules.config.istio.io                      2020-05-06T06:14:29Z
templates.config.istio.io                  2020-05-06T06:14:29Z

authentication:策略管控

$ kubectl get customresourcedefinition|grep istio.io|grep authentication
meshpolicies.authentication.istio.io       2020-05-06T06:14:28Z
peerauthentications.security.istio.io      2020-05-06T06:14:28Z
policies.authentication.istio.io           2020-05-06T06:14:28Z
requestauthentications.security.istio.io   2020-05-06T06:14:29Z

rbac:基于角色的访问控制

$ kubectl get customresourcedefinition|grep istio.io|grep rbac
clusterrbacconfigs.rbac.istio.io           2020-05-06T06:14:27Z
rbacconfigs.rbac.istio.io                  2020-05-06T06:14:29Z
servicerolebindings.rbac.istio.io          2020-05-06T06:14:29Z
serviceroles.rbac.istio.io                 2020-05-06T06:14:29Z

networking:流量管理

$ kubectl get customresourcedefinition|grep istio.io|grep networking
destinationrules.networking.istio.io       2020-05-06T06:14:27Z
envoyfilters.networking.istio.io           2020-05-06T06:14:27Z
gateways.networking.istio.io               2020-05-06T06:14:27Z
serviceentries.networking.istio.io         2020-05-06T06:14:29Z
sidecars.networking.istio.io               2020-05-06T06:14:29Z
virtualservices.networking.istio.io        2020-05-06T06:14:30Z

查看 pod 中 Envoy sidecar 的启动配置信息

istioctl proxy-config bootstrap nginx-649b6985f8-nwfxv -o json -n default

1.确定isito ingress gateway service 的IP和端口,若自身环境未使用外部负载均衡器,需要通过 node port 访问

$ kubectl get svc istio-ingressgateway -n istio-system
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')	

2.增加gateway定义。

 - gateway定义中的selector会将该gateway设置与相应的ingressgateway pod(类似ingress pod)绑定。
 - gateway定义中的servers的port会在相应的ingressgateway pod中生成port相应的代理listener实例。
   监听端口80默认已经创建并且ingressgateway pod已默认暴露。ingressgateway pod对应的服务也需要注册相应的端口(80默认已注册)(若是非默认的监听端口需要配置打开)。
 - gateway定义中的hosts表示listener会向哪些特定的虚拟主机转发流量。

3.增加virtualservice定义。

 - virtualservice定义中的hosts与gateway中的hosts相对应,表示virtualservice可以注册到gateway的监听中,这个host会更新到ingressgateway pod路由表的虚拟主机条目中。
 - virtualservice定义中的gateways表示该规则就只会应用到声明的Gateway之中。
  (保留字mesh用来指代网格中的所有Sidecar。当这一字段被省略时,就会使用缺省值mesh)
 - virtualservice定义中的http定义了路由规则,路由规则会写入到相应gateway pod的路由表中。

你可能感兴趣的:(istio 理解1)