假设需要引入一个外部服务,外部服务ip为10.10.102.90,端口为32033.
引入到istio中后,我想通过域名gindemo.test.ch:9090来访问这个服务。
serviceentry yaml内容如下:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: gindemo-service-entry
spec:
addresses:
- 10.10.102.90
endpoints:
- address: 10.10.102.90
ports:
http: 32033
hosts:
- gindemo.test.ch
location: MESH_EXTERNAL
ports:
- name: http # 注意,这个名字是不能修改的
number: 9090
protocol: HTTP
resolution: STATIC
引入之后,在sidecar中查询clusters,检查istio是否成功发现该服务
访问服务:
结合vs使用:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: gindemo-virtual-service
spec:
hosts:
- gindemo.test.ch
gateways:
- mesh
http:
- match:
- port: 80 # 注意,这个端口是不能修改的
route:
- destination:
host: gindemo.test.ch
port:
number: 9090 # serviceentry中定义的port
结合dr使用:
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: random-lb-destination-rule
spec:
host: gindemo.test.ch # 外部服务或内部服务的域名
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN # 配置为随机负载均衡策略
connectionPool:
http:
http1MaxPendingRequests: 100 # HTTP 1.x 最大挂起请求数
maxRequestsPerConnection: 10 # 每个连接的最大请求数
outlierDetection:
consecutiveErrors: 5 # 连续 5 次错误后剔除实例
interval: 10s # 检测间隔
baseEjectionTime: 30s # 剔除时间
maxEjectionPercent: 50 # 最大剔除百分比