《2020-11-12》istio安装及inject
istio1. 介绍pilot 服务发现kiali 控制面板prometheus 监控telemetry 遥测gateway 网关//todo2. 安装官方中文文档https://preliminary.istio.io/zh/docs/setup/getting-started2.1 在k8s中安装步骤下载地址https://github.com/istio/istio/releases/或者直
istio
1. 介绍
pilot 服务发现
kiali 控制面板
prometheus 监控
telemetry 遥测
gateway 网关
//todo
2. 安装
官方中文文档
https://preliminary.istio.io/zh/docs/setup/getting-started
2.1 在k8s中安装步骤
-
下载地址
https://github.com/istio/istio/releases/
或者直接curl下载
curl -L https://istio.io/downloadIstio | sh -
会将最新文档版本下载,这样直接下载时候,报403错误
添加199.232.28.133 raw.githubusercontent.com
至hosts文件 -
将 istioctl 客户端路径增加到 path 环境变量中
export PATH=$PWD/bin:$PATH
-
istioctl自动补全
cp tools/istioctl.bash ~/.istioctl.bash
source /root/.istioctl.bash
- 安装demo配置
istioctl manifest install --set profile=demo
验证
kubectl get svc -n istio-system
如果集群运行在一个不支持外部负载均衡器的环境中(例如:minikube),
istio-ingressgateway 的 EXTERNAL-IP 将显示为 状态。请使用服务的 NodePort 或 端口转发来访问网关
修改入口网关的服务类型为NodePort
kubectl patch svc -n istio-system istio-ingressgateway -p '{"spec":{"type":"NodePort"}}'
至此基本结束
3. istioctl常用命令
-
查看版本信息
istioctl version -
analyze
istioctl analyze -
查看profile list
[root@k8master istio-1.7.4]# istioctl profile list
Istio configuration profiles:
remote
default
demo
empty
minimal
preview
-
将profile导出为yaml文件
istioctl profile dump demo > demo.yaml
包含两部分
components(组件) 和 addonComponents(插件)
不同配置文件内容:
https://preliminary.istio.io/latest/zh/docs/setup/additional-setup/config-profiles/
4. 注入inject
4.1 手动注入
# touch jiuxi-deployment.yaml
# kubectl create ns jiuxi-ns
# kubectl apply –f jiuxi-deployment.yaml –n jiuxi-ns
# istioctl kube-inject –f jiuxi-deployment.yaml –o jiuxi-deployment-inject.yaml
# istioctl kube-inject –f jiuxi-deployment.yaml | kubectl apply –f - -n jiuxi-ns
第4条命令没有注入,只是生成yaml文件,第5条命令实现注入
istioctl kube-inject -f jiuxi-deployment.yaml -o jiuxi-deployment-inject.yaml
查看生成的jiuxi-deployment-injet.yaml文件,可以看到:
(1) 多了一个initContainers
(2) 多了一个
image: docker.io/istio/proxyv2:1.7.4
name: istio-proxy
这样的container
- 注入之前
[root@k8master istio]# kubectl get pods -n jiuxi-ns
NAME READY STATUS RESTARTS AGE
jiuxi-86b5bbbfc8-8qh5z 1/1 Running 0 4m51s
[root@k8master istio]# kubectl exec -it -n jiuxi-ns jiuxi-86b5bbbfc8-8qh5z sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1/nginx: master pro
/ # ps -ef
PID USER TIME COMMAND
1 root 0:00 nginx: master process nginx -g daemon off;
6 nginx 0:00 nginx: worker process
32 root 0:00 sh
38 root 0:00 ps -ef
[root@k8master istio]# kubectl exec -it -n jiuxi-ns jiuxi-86b5bbbfc8-8qh5z -c nginx -- ifconfig
eth0 Link encap:Ethernet HWaddr 72:AE:6A:91:9F:D3
inet addr:10.244.2.23 Bcast:10.244.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:213 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:37479 (36.6 KiB) TX bytes:42 (42.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
执行:istioctl kube-inject –f jiuxi-deployment.yaml | kubectl apply –f - -n jiuxi-ns
注入之后:
注意:pod中的所有container在同一个网络空间
这个过程是:
- 会新建一个新的pod
- pod中initContainer会修改路由规则,把所有的流量都重定向
- 一个新的container: istio-proxy会启动两个服务,一个为envoy,一个pilot-agent
pilot-agent负责调度envoy运行,及修改相关流控配置
pilot-server监听api-server的变化
当pilot-server监听到api-server的变化时,会同pilot-agent进行通信,再由pilot-agent配置管理envoy路由策略
4.2 自动注入
创建一个namespace, 给这个namespace打个标签, 设置为自动注入
当使用 kubectl apply 来部署应用时,如果 pod 启动在标有 istio-injection=enabled 的命名空间中,那么,Istio sidecar 注入器将自动注入 Envoy 容器到应用的 pod 中
$ kubectl label namespace <namespace> istio-injection=enabled
$ kubectl create -n <namespace> -f <your-app-spec>.yaml
更多推荐
所有评论(0)