第九部分 Istio 安装之Kubernetes命令方式

注意事项

  • 因大部分都是国外资源,时刻做好翻墙的准备。
  • 此文仅是在kubernetes平台命令安装,不涉及任何的云和Helm,适用于测试和体验Istio,生产环境建议使用Helm安装方案。

下载Istio安装包

1.下载对应目标操作系统的安装文件,建议使用此方法,下载地址如下:

https://github.com/istio/istio/releases

2.或Linux使用如下的脚本进行下载和自动解压缩:

curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.1.5 sh -

3.进入 Istio 包目录。例如,版本为1.1.5

cd istio-1.1.5

4.目录结构介绍:

  • install目录:包含了 Kubernetes 安装所需的 .yaml 文件
  • samples目录:Istio示例应用
  • bin目录:包括istioctl 客户端文件。istioctl 的功能是手工进行 Envoy Sidecar 的注入。
  • istio.VERSION :版本配置文件

5.添加环境变量

把 istioctl 客户端加入 PATH 环境变量,如,export PATH=$PWD/bin:$PATH

安装前准备

1.正确安装kubernetes

Kubernetes版本为1.9以上,Istio1.1.3被测试在1.11、1.12和1.13上正常运行,此处建议使用1.11以上的版本。本文kubernetes1.13.4,Istio1.1.3,docker17.06.0-ce

2.kubernetes中Pod需满足以下要求。

  1. 端口正确命名:服务端口必须进行命名。端口名称只允许是<协议>[-<后缀>-]模式,其中协议包括grpc、http、http2、https、mongo、redis、tcp、tls 以及 udp,Istio 可以通过对这些协议的支持来提供路由能力。名称如:http2-test有效;http2test无效。若没给端口命名或名称不符合规范,则不受Istio流量管理。
  2. Pod端口:Pod 必须包含每个容器将监听的明确端口列表。在每个端口的容器规范中使用 containerPort。任何未列出的端口都将绕过 Istio Proxy。
  3. 关联服务:Pod 不论是否公开端口,都必须关联到至少一个 Kubernetes 服务上,如果一个 Pod 属于多个服务,这些服务不能在同一端口上使用不同协议,例如 HTTP 和 TCP。
  4. 标签设置:在使用 Kubernetes Deployment 进行 Pod 部署的时候,建议为Deployment添加有意义的app 以及 version 标签。app 标签在分布式追踪的过程中会被用来加入上下文信息。Istio 还会用 app 和 version 标签来给遥测指标数据加入上下文信息。
  5. Application UID:不要使用 ID(UID)值为 1337 的用户来运行应用。
  6. NET_ADMIN 功能:Istio需要管理Pod流量, 此pod 必须具有NET_ADMIN,功能除非您使用 Istio CNI 插件。

在 Kubernetes 中快速开始

kubernetes1.13.4安装Istio1.1.3。

1.进入Istio1.1.3目录

cd istio-1.1.3

2.安装 Istio 的自定义资源定义(CRD),

for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done

3.使用mutual TLS 的宽容模式部署istio

如果使用 mutual TLS 的宽容模式,所有的服务会同时允许明文和双向 TLS 的流量。在没有明确配置客户端进行双向 TLS 通信的情况下,客户端会发送明文流量。

该场景适用于:

  • 已有应用的集群;
  • 注入了 Istio sidecar 的服务有和非 Istio Kubernetes 服务通信的需要;
  • 需要进行存活和就绪检测的应用;
  • Headless 服务;
  • StatefulSet。

运行下面的命令即可完成这一模式的安装,该文件比较大,请自行查阅。

kubectl apply -f install/kubernetes/istio-demo.yaml

3.或使用mutual TLS 的严格模式部署istio

这种方案会在所有的客户端和服务器之间使用 双向 TLS。这种方式只适合所有工作负载都受 Istio 管理的 Kubernetes 集群。所有新部署的工作负载都会注入 Istio sidecar。运行下面的命令可以安装这种方案,该文件比较大,请自行查阅。

kubectl apply -f install/kubernetes/istio-demo-auth.yaml

4.确认部署结果

确认下列 Kubernetes 服务已经部署并都具有各自的 CLUSTER-IP

kubectl get svc -n istio-system
NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                                                                   AGE
grafana                  ClusterIP      172.21.211.123   <none>          3000/TCP                                                                                                                  2m
istio-citadel            ClusterIP      172.21.177.222   <none>          8060/TCP,9093/TCP                                                                                                         2m
istio-egressgateway      ClusterIP      172.21.113.24    <none>          80/TCP,443/TCP                                                                                                            2m
istio-galley             ClusterIP      172.21.132.247   <none>          443/TCP,9093/TCP                                                                                                          2m
istio-ingressgateway     LoadBalancer   172.21.144.254   <pending>       80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:32081/TCP,8060:31695/TCP,853:31235/TCP,15030:32717/TCP,15031:32054/TCP   2m
istio-pilot              ClusterIP      172.21.105.205   <none>          15010/TCP,15011/TCP,8080/TCP,9093/TCP                                                                                     2m
istio-policy             ClusterIP      172.21.14.236    <none>          9091/TCP,15004/TCP,9093/TCP                                                                                               2m
istio-sidecar-injector   ClusterIP      172.21.155.47    <none>          443/TCP                                                                                                                   2m
istio-telemetry          ClusterIP      172.21.196.79    <none>          9091/TCP,15004/TCP,9093/TCP,42422/TCP                                                                                     2m
jaeger-agent             ClusterIP      None             <none>          5775/UDP,6831/UDP,6832/UDP                                                                                                2m
jaeger-collector         ClusterIP      172.21.135.51    <none>          14267/TCP,14268/TCP                                                                                                       2m
jaeger-query             ClusterIP      172.21.26.187    <none>          16686/TCP                                                                                                                 2m
kiali                    ClusterIP      172.21.155.201   <none>          20001/TCP                                                                                                                 2m
prometheus               ClusterIP      172.21.63.159    <none>          9090/TCP                                                                                                                  2m
tracing                  ClusterIP      172.21.2.245     <none>          80/TCP                                                                                                                    2m
zipkin                   ClusterIP      172.21.182.245   <none>          9411/TCP                                                                                                                  2m

如果集群在一个没有外部负载均衡器支持的环境中运行(例如 Minikube),istio-ingressgateway 的 EXTERNAL-IP 会是 <pending>。要访问这个网关,只能通过服务的 NodePort 或者使用端口转发来进行访问。

确认必要的 Kubernetes Pod 都已经创建并且其 STATUS 的值是 Running:

kubectl get pods -n istio-system
NAME                                                           READY   STATUS      RESTARTS   AGE
grafana-f8467cc6-rbjlg                                         1/1     Running     0          1m
istio-citadel-78df5b548f-g5cpw                                 1/1     Running     0          1m
istio-cleanup-secrets-release-1.1-20190308-09-16-8s2mp         0/1     Completed   0          2m
istio-egressgateway-78569df5c4-zwtb5                           1/1     Running     0          1m
istio-galley-74d5f764fc-q7nrk                                  1/1     Running     0          1m
istio-grafana-post-install-release-1.1-20190308-09-16-2p7m5    0/1     Completed   0          2m
istio-ingressgateway-7ddcfd665c-dmtqz                          1/1     Running     0          1m
istio-pilot-f479bbf5c-qwr28                                    2/2     Running     0          1m
istio-policy-6fccc5c868-xhblv                                  2/2     Running     2          1m
istio-security-post-install-release-1.1-20190308-09-16-bmfs4   0/1     Completed   0          2m
istio-sidecar-injector-78499d85b8-x44m6                        1/1     Running     0          1m
istio-telemetry-78b96c6cb6-ldm9q                               2/2     Running     2          1m
istio-tracing-69b5f778b7-s2zvw                                 1/1     Running     0          1m
kiali-99f7467dc-6rvwp                                          1/1     Running     0          1m
prometheus-67cdb66cbb-9w2hm                                    1/1     Running     0          1m

部署应用

举例,部署Istio 的发布包中的 示例应用Bookinfo。在使用 kubectl apply 进行应用部署的时候,如果目标命名空间已经打上了标签 istio-injection=enabled,Istio sidecar injector 会自动把 Envoy 容器注入到你的应用 Pod 之中。

kubectl label namespace <namespace> istio-injection=enabled
kubectl create -n <namespace> -f <your-app-spec>.yaml

如果目标命名空间中没有打上 istio-injection 标签, 可以使用 istioctl kube-inject 命令,在部署之前手工把 Envoy 容器注入到应用 Pod 之中:

istioctl kube-inject -f <your-app-spec>.yaml | kubectl apply -f -

删除

删除 RBAC 权限、istio-system 命名空间及其所有资源。因为有些资源会被级联删除,因此会出现一些无法找到资源的提示,可以忽略。据启用的 mutual TLS 模式进行删除:

  • 删除宽容模式部署的istio
kubectl delete -f install/kubernetes/istio-demo.yaml
  • 删除严格模式部署的istio
kubectl delete -f install/kubernetes/istio-demo-auth.yaml

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值