注入 Istio sidecar

网格中的每个 Pod 都必须伴随一个 Istio 兼容的 Sidecar 一同运行。

下文中将会介绍两种把 Sidecar 注入到 Pod 中的方法:使用 istioctl 客户端工具进行注入,或者使用 Istio sidecar injector 自动完成注入过程。

手工注入过程会修改控制器(例如 Deployment)的配置。这种注入方法会修改 Pod template,把 Sidecar 注入到目标控制器生成的所有 Pod 之中。要加入、更新或者移除 Sidecar,就需要修改整个控制器。

自动注入过程会在 Pod 的生成过程中进行注入,这种方法不会更改控制器的配置。手工删除 Pod 或者使用滚动更新都可以选择性的对 Sidecar 进行更新。

手工或自动注入都会从 istio-system 命名空间的 istio-sidecar-injector 以及 istio ConfigMap 中获取配置信息。手工注入方式还可以选择从本地文件中读取配置。

Sidecar 的自动注入

使用 Kubernetes 的 mutating webhook admission controller,可以进行 Sidecar 的自动注入。Kubernetes 1.9 以后的版本才具备这一能力。使用这一功能之前首先要检查 kube-apiserver 的进程,是否具备 admission-control 参数,并且这个参数的值中需要包含 MutatingAdmissionWebhook 以及 ValidatingAdmissionWebhook 两项,并且按照正确的顺序加载,这样才能启用 admissionregistration API:

[root@cn-hongkong ~]# kubectl api-versions | grep admissionregistration
admissionregistration.k8s.io/v1beta1

注意,跟手工注入不同的是,自动注入过程是发生在 Pod 级别的。因此是不会看到 Deployment 本身发生什么变化的。但是可以使用 kubectl describe 来观察单独的 Pod,在其中能看到注入 Sidecar 的相关信息。

应用部署

部署 sleep 应用,检查一下是不是只产生了一个容器。

kubectl apply -f samples/sleep/sleep.yaml
kubectl get deployment -o wide

default 命名空间设置标签:istio-injection=enabled: 注意是只要运行在这个namespace下都pod都会自动注入Sidecar.

kubectl label namespace default istio-injection=enabled
kubectl get namespace -L istio-injection

这样就会在 Pod 创建时触发 Sidecar 的注入过程了。删掉运行的 Pod,会产生一个新的 Pod,新 Pod 会被注入 Sidecar。原有的 Pod 只有一个容器,而被注入 Sidecar 的 Pod 会有两个容器:

禁用 default 命名空间的自动注入功能,然后检查新建 Pod 是不是就不带有 Sidecar 容器了:

kubectl label namespace default istio-injection-
kubectl delete pod sleep-776b7bcdcd-bhn9m
kubectl get pod

排除pod注入

同时也可以在deployment中通过设置annotation,sidecar.istio.io/inject=true来控制pod级别的自动注入。

[root@cn-hongkong k8s_yaml]# cat httpd.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: httpd
spec:
replicas: 2
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
labels:
run: httpd
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80

Sidecar 手动注入

a) 下载istioctl工具并拷贝至环境,链接https://github.com/istio/istio/releases/

b) 将istioctl二进制拷贝至/usr/local/bin目录下

mv -f istioctl /usr/local/bin

c)安装Istio控制面,确认注入相关configmap已创建成功

$ kubectl get cm -n istio-system | grep istio-sidecar-injector
istio-sidecar-injector 1 15h

d)准备需要注入的文件test.yaml

e) 将istioctl处理之后的内容部署到kubernetes上

$kubectl apply -f <(istioctl kube-inject -f test.yaml)
或者
$istioctl kube-inject -f test.yaml | kubectl apply -f -

f)  可以通过k8s命令查看pod详细内容

$kubectl describe pod test-c9f4b55c7-np4cf

故障排查

现象:当启动了基于namespace或者手动出入sidecar时,发现pod无法起来。

排查方法:

1.kubectl describe rs httpd

发现日志显示istio-sidecar-injector连接超时。

解决方法:

kubectl delete pod istio-sidecar-injector-6fd47fb7c8-mr9kp -n istio-system

注入 Istio sidecar的更多相关文章

  1. Istio Sidecar注入原理

    概念 简单来说,Sidecar 注入会将额外容器的配置添加到 Pod 模板中.这里特指将Envoy容器注应用所在Pod中. Istio 服务网格目前所需的容器有: istio-init 用于设置 ip ...

  2. Istio Sidecar

    概念及示例 Sidecar描述了sidecar代理的配置.默认情况下,Istio 让每个 Envoy 代理都可以访问来自和它关联的工作负载的所有端口的请求,然后转发到对应的工作负载.您可以使用 sid ...

  3. istio sidecar自动注入过程分析

    目录 istio sidecar自动注入过程分析 sidecar自动注入检查 检查kube-apiserver 检查sidecar-injector的configmap 检查namespace标签 s ...

  4. istio sidecar流量处理机制及配置

    sidecar 介绍 在istio的流量管理等功能,都需要通过下发的配置应用到应用运行环境执行后生效,负责执行配置规则的组件在service mesh中承载应用代理的实体被称为side-car Ist ...

  5. istio sidecar使用自定义镜像源

    Istio 和 sidecar 配置保存在 istio 和 istio-sidecar-injector 这两个 ConfigMap 中,其中包含了 Go template,所谓自动 sidecar ...

  6. 部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0)

    部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0) 部署Bookinfo示例程序   在下载的Istio安装包的samples目录中包含了示例应用程序. ...

  7. 安装istio v1.0 详细过程和步骤

      创建 istio 目录 [root@centos-110 ~]# mkdir istio [root@centos-110 ~]# cd istio   方案一: # 去下面的地址下载压缩包  # ...

  8. idou老师教你学Istio 15:Istio实现双向TLS的迁移

    在Istio中,双向TLS是传输身份验证的完整堆栈解决方案,它为每个服务提供可跨集群的强大身份.保护服务到服务通信和最终用户到服务通信,以及提供密钥管理系统.本文阐述如何在不中断通信的情况下,把现存I ...

  9. openshift 4.3 Istio的搭建(istio 系列一)

    openshift 4.3 Istio的搭建 本文档覆盖了官方文档的Setup的所有章节 目录 openshift 4.3 Istio的搭建 安装Istio openshift安装Istio 更新is ...

随机推荐

  1. mysql新增用户

    新开了个项目,数据库也想新搞个用户,先登陆mysql,看看原来都有哪些: root@wlf:/# mysql -uroot -p Enter password: Welcome to the MySQ ...

  2. ByteUtil

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  3. weixin-js-sdk

    场景:在h5移动端,实现分享朋友,分享朋友圈. 插曲:一开始我认为是不能做到分享的,主要是我从微信小程序的角度出发的,想着微信小程序都做不到分享朋友圈功能,那h5就更不能实现了,导致出现了错误的判断. ...

  4. Failed to open .vcf.gz: could not load index

    这类报错在我使用bcftools index file.vcf.gz进行index出现的. 解决办法是换用tabix进行index,命令为tabix -p vcf file.vcf.gz. 用tabi ...

  5. django web问题

    django生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. ...

  6. 工控随笔_C#连接PLC_之_C#入门_02_程序性结构和注释

    前段时间看C#本质论,发现内容有点抽象,不适合入门,现在换了一本适合入门的书籍: C#图解教程. //引用命名空间,命名空间相当于一个容器,通过不同的容器来区分同名的内容 //System命名空间是. ...

  7. SpringBoot 为什么能够自动的注入一些常用的Bean ?

    原文转载至:https://blog.csdn.net/qq_29941401/article/details/79605388 但是我一直没有搞懂druid是怎么自动配置的? 这个是properti ...

  8. spring boot2X整合Consul一服务注册与发现

    Consul 是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置. 关键特性: 服务注册/发现 数据强一致性保证 多数据中心 健康检查 key/value存储 1.下载 htt ...

  9. ACM- 编程练习网站--输入数据方法

    #include "stdafx.h" #include <iostream> #include <string> #include <algorit ...

  10. 使用docker-compose快速搭建gitlab

    1. 准备工作: centos7 [root@dev_vonedao_95 gitlab]# docker -v Docker version , build 633a0ea [root@dev_vo ...