博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k8s(四)、微服务框架istio安装测试
阅读量:6990 次
发布时间:2019-06-27

本文共 4596 字,大约阅读时间需要 15 分钟。

hot3.png

 

资料:

https://www.2cto.com/kf/201805/749007.html

https://blog.csdn.net/wenwenxiong/article/details/80068697

一、前言

Istio是Google/IBM/Lyft联合开发的开源项目,2017年5月发布第一个release 0.1.0,Service Mesh微服务新秀,采用sidecar的实现方式,有着高性能、极低的资源开销、无代码入侵等优秀特性,扛起微服务大旗,并与当下火热的k8s Paas容器云平台深度整合。官方描述为:

An open platform to connect, manage, and secure microservices
  • 1

Istio提供一种简单的方式来建立已部署的服务的网络,具备负载均衡,服务到服务认证,监控等等功能,与k8s深度整合。 

各组件工作图: 
这里写图片描述

控制层面组件: 

1.Pilot:负责将调度的配置下发到各svc endpoint后pod中注入的Envoys 
2.Mixer:负责流量策略等统一调度 
3.Citadel:负责安全策略,如TLS证书颁发

数据层面组件: 

Envroys:将envroys proxy容器,以sidecar的方式注入到svc后端的pod中,与控制层面组件交互。一图助你理解sidecar工作方式(即:边三轮~): 
这里写图片描述

非常感谢: 

二、部署安装

1.部署前准备 

这里使用较新的istio 0.7版本(目前最新为0.8),要求k8s版本1.9以上,同时对k8s有以下要求

# k8s 1.9 版本以后才能使用# 查看是否支持kubectl api-versions | grep admissionregistration# 除了要满足以上条件外还需要检查kube-apiserver启动的参数# k8s 1.9 版本要确保 --admission-control 里有 MutatingAdmissionWebhook,ValidatingAdmissionWebhook# k8s 1.9 之后的版本要确保 --enable-admission-plugins 里有MutatingAdmissionWebhook,ValidatingAdmissionWebhook# kubeadm默认安装的k8s 1.9版本,kube-apiserver启动参数 --admission-control 里没有 MutatingAdmissionWebhook,ValidatingAdmissionWebhook#需要修改vim /etc/kubernetes/manifests/kube-apiserver.yaml,给--admission-control 添加两个参数 MutatingAdmissionWebhook,ValidatingAdmissionWebhook#添加完成保存退出后重启kubelet服务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.安装istio

wget https://github.com/istio/istio/releases/download/0.7.1/istio-0.7.1-linux.tar.gztar xf istio-0.7.1-linux.tar.gz# 安装配置环境变量mv istio-0.7.1 /usr/local/ln -sv /usr/local/istio-0.7.1 /usr/local/istioecho 'export PATH=/usr/local/istio/bin:$PATH' > /etc/profile.d/istio.shsource /etc/profile.d/istio.shistioctl version# 如果环境不是云环境,不支持LoadBalancer# 在公司生产环境中ingress-controller使用的是traefik,因此我这里是以ClusterIP的方式部署的istio-ingress service# 若没有其他的ingress,可以直接使用istio-ingress,修改 Istio-ingress service type使用 NodePort# 大概在1548-1590行左右cd /usr/local/istiocp install/kubernetes/istio.yaml install/kubernetes/istio.yaml.orivim install/kubernetes/istio.yaml...apiVersion: v1kind: Servicemetadata:  name: istio-ingress  namespace: istio-system  labels:    istio: ingressspec:  # type: LoadBlance  type: ClusterIP  ports:  - port: 80#   nodePort: 32000    name: http  - port: 443    name: https  selector:    istio: ingress...# 安装不使用认证(不使用tls)kubectl apply -f install/kubernetes/istio.yaml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

3.启用自动注入sidecar

#注意上方讲的钩子一定给kube-apiserver要配置上# 生成所需要的证书./install/kubernetes/webhook-create-signed-cert.sh \    --service istio-sidecar-injector \    --namespace istio-system \    --secret sidecar-injector-certs# 创建配置configmapkubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml# 生成相关yamlcat install/kubernetes/istio-sidecar-injector.yaml | \     ./install/kubernetes/webhook-patch-ca-bundle.sh > \     install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml# 安装webhookkubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml# 查看kubectl -n istio-system get deployment -listio=sidecar-injectorkubectl get namespace -L istio-injection# 开启注入前,创建测试用例kubectl apply -f samples/sleep/sleep.yaml kubectl get deployment -o widekubectl get pod# 设置 default namespace 开启自动注入kubectl label namespace default istio-injection=enabledkubectl get namespace -L istio-injection# 删除创建的pod,等待重建kubectl delete pod $(kubectl get pod | grep sleep | cut -d ' ' -f 1)# 查看重建后的pod# 查看描述,看看创建pod过程中是否有istio-proxy容器(即sidecar)kubectl get podkubectl describe pod $(kubectl get pod | grep sleep | cut -d ' ' -f 1)# 清理kubectl delete -f samples/sleep/sleep.yaml # 关闭default命名空间自动注入kubectl label namespace default istio-injection-# 关闭部分pod的自动注入功能...  template:    metadata:      annotations:        sidecar.istio.io/inject: "false"...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

若不开启针对命名空间的自动注入,只想对部分部署使用自动注入,可以使用:

#不开启自动注入部署应用需要使用如下方式的命令,即给原有的部署yaml文件内容器部分添加一个istio-proxy容器kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)
  • 1
  • 2

4.访问测试

GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}')curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
  • 1
  • 2
  • 3
  • 4

5.清理: 

k8s创建和清理部署应用非常简单,创建使用apply/create,清理使用delete,文件指向部署yaml即可。

# 清理官方用例samples/bookinfo/kube/cleanup.sh# 清理istiokubectl delete -f install/kubernetes/istio.yaml# kubectl delete -f install/kubernetes/istio-auth.yaml

转载于:https://my.oschina.net/xiaominmin/blog/1851357

你可能感兴趣的文章
各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵
查看>>
html 跳转页面,同时跳转到一个指定的位置
查看>>
solr的suggest模块
查看>>
SWT中ole/activex实践--操作word的一个例子
查看>>
Volley(二)—— 基本Request对象 & RequestQueue&请求取消
查看>>
arguments对象的实例使用
查看>>
easyui datalist按组多选
查看>>
Python-代码对象
查看>>
Xcode界面切换动画效果
查看>>
StackExchange.Redis 访问封装类
查看>>
李洪强-C语言7-C语言运算符
查看>>
要引用这几个才有GetOwinContext与GetAutofacLifetimeScope
查看>>
SVD奇异值分解
查看>>
Chapter 1 First Sight——19
查看>>
iOS获取手机型号,Swift获取手机型号(类似iphone 7这种,检测机型具体型号)
查看>>
在linux下python爬虫进程发生异常时自动重启直至正常结束的方法
查看>>
ASP.NET Aries JSAPI 文档说明:AR.Form、AR.Combobox
查看>>
Dubbo系列(2)_RPC介绍
查看>>
JS实现打印功能
查看>>
JavaScript系列文章:不能不看的数据类型检测
查看>>