pkslow.com 南瓜慢说

  • AllArticles
  • Container
  • Spring
  • Life
  • Cloud
  • Collections
  • About
  • GitHub

  • Search
App Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java

服务网格Istio入门-详细记录Kubernetes安装Istio并使用

Created on: 2021-08-09 | Category: DevOps | 0 | View: 1102

1 服务网格Istio

Istio是开源的Service Mesh实现,一般用于Kubernetes集群容器中的连接、监控和保护。它的核心特性有:

  • 流量管理
    • 通过简单配置实现服务之间的流量;
    • 简化服务级属性如熔断、超时、重试;
    • 支持A/B测试、金丝雀发布等。
  • 安全
    • 通信层面的安全控制;
    • 开发人员只需要专注于应用程序开发。
  • 可观察性
    • Metrics;
    • Logging;
    • Tracing。
  • 平台支持
    • Kubernetes;
    • 各种云平台。

Istio的架构分为数据平台和控制平面,数据平面通过Sidecar代理工作,如下:

2 Kubernetes安装istio

2.1 创建服务器

为了避免出现镜像下载慢或无法下载的问题,我们使用阿里云香港的服务器来做示例。为了省钱,我使用的是抢占式实例,8CPU 16GB内存,大概是0.28/小时,用完即删就可以了。

  • CPU:8核

  • 内存:16GB

  • 系统:Ubuntu 20.04 64位

  • 价格:0.28/时

  • 分配公网IP:是

  • 带宽计费模式:按使用流量

  • 带宽峰值:最大

测试登陆如下:

ssh root@xx.xxx.xxx.xxx

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       153Mi        15Gi       2.0Mi       325Mi        15Gi

正常连接,可以开始使用了。

2.2 安装Kubernetes

我这里不打算创建一个Kubernetes集群,所以只用了一台机,如果有兴趣的可查看之间的文章《详细记录用kubeadm在Ubuntu上安装Kubernetes集群》。

这里通过minikube来启动kubernetes,我们一步一步来安装吧:

# 必要的更新
$ apt-get update -y
$ apt-get upgrade -y

# 下载kubectl命令行工具
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 执行权限
$ chmod a+x kubectl
$ mv ./kubectl /usr/local/bin/kubectl

# 安装Docker
$ apt-get install -y docker.io

# 检测Docker安装情况
$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu1~20.04.1

# 下载minikube
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

# 执行权限
$ chmod +x minikube
$ mv minikube /usr/local/bin

# 安装conntrack依赖
$ apt-get install -y conntrack

# 启动kubernetes,需要等待一小段时间,因为要下载镜像,启动kubernetes
$ minikube start --driver=none

# 检测启动成功
kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}

我们看到对应的Pod也起来了:

2.3 安装istio

安装完Kubernetes后,我们就可以开始安装Istio了,过程如下:

# 下载安装包:
$ curl -L https://istio.io/downloadIstio | sh -

# 添加到Path
$ export PATH="$PATH:/root/istio-1.10.3/bin"

# 检测是否可以正常安装
$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!

# 执行安装
$ istioctl install

安装成功后,会出现如下界面:

查看命名空间,会多出一个istio-system:

3 使用istio

我们通过安装官方的示例来看如何使用。先要给对应的命令空间加标签,这样istio才会识别,才会注入代理:

$ kubectl label namespace default istio-injection=enabled

接着我们安装对应的示例代码:

kubectl apply -f istio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml

可以看到所有应用都起来了,而且每个Pod是有两个Container的:

为了更好地监控我们的应用,我们来添加一些组件或插件:

$ kubectl apply -f istio-1.10.3/samples/addons

这样,我们就多了许多新的组件,如Grafana、Jaeger、Kiali、Prometheus等:

我们以Kiali以例,暴露服务出来,来看看它给我们带来了什么:

# 添加NodePort
$ kubectl expose deployment kiali --type=NodePort --name=kiali-nodeport -n istio-system

# 找到对应的端口
kubectl get service -n istio-system | grep kiali

# 在其它外部访问,注意IP为服务器的公网IP
$ curl 47.242.151.110:31015
<a href="/kiali/">Found</a>.

打开:http://47.242.151.110:31015/kiali ,不要用Chrome打开,对于非https的网页,Chrome会打开失败。我用Safari可以正常打开:

我们来模拟一些请求:

kubectl get svc
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.101.63.99     <none>        9080/TCP   77m
kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP    132m
productpage   ClusterIP   10.110.126.60    <none>        9080/TCP   77m
ratings       ClusterIP   10.104.252.123   <none>        9080/TCP   77m
reviews       ClusterIP   10.104.41.104    <none>        9080/TCP   77m

# 循环发送请求
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.101.63.99:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.110.126.60:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.104.252.123:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.104.41.104:9080"; done

查看Graph,就可以看到一些请求的线,红色是失败的,绿色是健康正常的:

当然还有其它更多的功能,这里就不一一讲解了。

4 总结

这篇为入门体验,以后更多细节我们再一一道来吧。


References:

Istio Getting Started

Docker和Kubernetes常用命令(持续整理)


Code for all: GitHub

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

file

Recommendations:
Cloud Native
Terraform
Container: Docker/Kubernetes
Spring Boot / Spring Cloud
Https
如何制定切实可行的计划并好好执行

  • Author 作者: LarryDpk 南瓜慢说
  • Link 链接: https://www.pkslow.com/archives/istio
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# App # Terraform101 # English # Terraform # Middleware # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # Plan # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # Performance # Email # Springboot # JavaCollections # ArrayList # Java
App Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java
Protobuf入门与使用示例,高性能的序列化框架
如何部署ReactJs打包后的build目录文件
  • Contents
  • Site Overview
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

多读书,多分享;多写作,多整理。

243 Posts
9 Categories
31 Tags
RSS
0%
© 2020 — 2022 南瓜慢说 pkslow The WebSite keeping alive:   粤ICP备20036375号