欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Istio 1.7初探(1.7.4)

程序员文章站 2022-06-17 13:14:15
...

一、安装

# 默认使用default profile(可通过--set profile=default|demo|...调整)
istioctl install
# enable access logs(启用isito-proxy访问日志)
--set meshConfig.accessLogFile=/dev/stdout
# 设置sidecar优先启动(且sidecar启动成功后再启动其他应用容器) - 1.7新特性
--set values.global.proxy.holdApplicationUntilProxyStarts=true

二、Istio profileIstio 1.7初探(1.7.4)

三、Istio sidecar优先启动

由于pod内容器按照spec.containers中的声明顺序依次启动,而initContainers会在所有容器启动前执行,故容器的启动顺序如下:

istio-init
app
istio-proxy

即istio-init修改pod内iptables令istio-proxy接管pod内所有流量(令app内的所有网络请求都需要经过istio-proxy),而app启动的过程中若发起网络请求,此时istio-proxy有可能还没有启动完成,导致网络异常。
在istio 1.7的change notes中宣布支持values.global.proxy.holdApplicationUntilProxyStarts配置选项以支持设置sidecar优先启动,
values.global.proxy.holdApplicationUntilProxyStarts默认关闭,可通过–set values.global.proxy.holdApplicationUntilProxyStarts=true开启,该特性影响如下:
(1)将sidecar istio-proxy容器放到pod containers中的第一位(即最先启动);
Istio 1.7初探(1.7.4)

(2)设置istio-proxy lifecycle已保证sidecar容器启动成功前一直阻塞(阻塞pod内其他容器启动);
Istio 1.7初探(1.7.4)
关于Istio sidecar优先启动,可参考:
1.控制pod内container执行顺序的几种姿势
2.Github - issues - App container unable to connect to network before sidecar is fully running #11130
3.Istio 1.7 是如何保证sidecar的启动顺序的
主要有以下几种实现方式:

  1. 利用K8s lifecycle中postStart阻塞其他容器启动;
    (1)阻塞sidecar直到其启动成功,同Istio实现
    Istio 1.7初探(1.7.4)
    Istio 1.7初探(1.7.4)Istio 1.7初探(1.7.4)

(2)阻塞app容器,使app容器监听sidecar启动端口,若监听sidecar启动端口不通,则重启app容器(直到sidecar启动就绪)
Istio 1.7初探(1.7.4)

  1. 利用K8s 1.18中的 lifecycle -> type: Sidecar
apiVersion: v1
kind: Pod
metadata:
  name: bookings-v1-b54bc7c9c-v42f6
  labels:
    app: demoapp
spec:
  containers:
  - name: bookings
    image: banzaicloud/allspark:0.1.1
    ...
  - name: istio-proxy
    image: docker.io/istio/proxyv2:1.4.3
    lifecycle:
      type: Sidecar
相关标签: istio