服务治理的三种发展形态
- 应用程序中包含治理逻辑
- 治理逻辑独立的代码(SDK模式)
- 治理逻辑独立的进程(SIDECAR模式)
spring cloud + k8s 与 istio + k8s的比较
项目 | istio + k8s | spring cloud + k8s |
---|---|---|
架构设计 | 基于Kubernetes能力构建 | 和Kubernetes无结合 |
服务发现 | 使用k8s服务名,和k8s一致的服务发现机制 | 两套服务发现。有服务发现数据不一致的问题。k8s中pod的正常歉意会引起重新进行服务注册 |
使用体验 | 完全的k8s使用体验。sidecar自动注入pod,业务无感知,和部署普通k8s服务无差别。 | 和k8s无结合,k8s只是提供了运行环境 |
控制面 | 无序额外的APIServer和规则策略定义。基于k8s CRD进行扩展。 | 需自行安装和维护控制面来管理治理规则。 |
istio的几个约束
端口命名:
服务端口必须进行命名,而且名称只能是protocol[-
]形式,protocol可以使tcp、http、http2、https、mysql、redis等。istio根据端口定义的协议提供对应的路由能力。如果端口未命名或没有基于这种格式,则端口的流量会当成tcp流量来处理。 服务关联
如果一个pod属于多个k8s服务,则要求服务不能再同一个端口使用不同的协议。
Deployment使用app和version标签:
每个deployment都需要一个有业务意义的app标签和一个表示版本的version标签。分布式追踪可以通过app标签补齐上下文信息,还可以通过app和version为遥测数据补齐上下文信息。
openshift deploy组件的注入问题
当开启了namespace的自动注入,又是在用openshift的deploy进行服务部署时,会发生deploy组件complete之后istio-proxy容器不会停止。这时,我们可以修改下istio-inject的ConfigMap配置:
当检测到
1 | neverInjectSelector: |