安装官方Bookinfo示例,如果路由规则正常运行,但类似的版本路由规则对自己的应用程序没有生效,则可能需要更改Kubernetes服务。
Kubernetes服务必须遵守某些限制才能利用Istio的L7路由功能,对pod和服务的要求如下。
1.服务端口命名约定
服务端口必须进行命名。端口名称只允许是<协议>[-<后缀>-]模式,其中<协议>部分可选择范围包括http、http2、grpc、mongo以及redis,Istio可以通过对这些协议的支持来提供路由能力。例如name:http2-foo和name:http都是有效的端口名,但name:http2foo就是无效的。如果没有给端口进行命名,或者命名没有使用指定前缀,那么这一端口的流量就会被视为普通TCP流量(除非显式地用Protocol:UDP声明该端口是UDP端口)。
2.关联服务
pod必须关联到Kubernetes服务,如果一个pod属于多个服务,这些服务不能在同一端口上使用不同协议,例如HTTP和TCP。
3.Deployment应带有app以及version类似标签
在使用Kubernetes Deployment进行pod部署的时候,建议显式地为Deployment加上app以及version类似标签。每个Deployment都应该有一个有意义的app标签和一个用于标识Deployment版本的version标签。app标签在分布式跟踪的过程中会用于加入上下文信息。Istio还会用app和version标签给遥测指标数据加入上下文信息。
不要使用ID(UID)值为1337的用户来运行应用。