从零开始,一步步构建服务网格istio

一、环境情况

环境: Ubuntu20.04

机器数量: 单机1台

IP: 10.9.2.83

二、准备知识

为什么使用 Istio?

Istio提供了一种更高级别的服务网格解决方案,它可以简化和加强 Kubernetes 集群中的服务间通信、流量管理、安全性和可观测性。使用 Istio,你可以减少依赖大量的 Ingress 资源和 Service 对象来处理网络的路由和代理。

安装istio为什么要先安装k8s?

istio是基于k8s来部署与使用的,所以安装istio前要先安装k8s环境

  • 本文只是为了入门,所以基于单机的方式搭建k8s也就是使用minikube的方式来搭建k8s
  • 🎯minikube的网络情况与kubectl搭建的有所不同,minikube本身就类似个虚拟机。所以nodeport对应的ip并不是主机ip,而是minikube虚拟的ip,这点比较重要,后续步骤里也会有提到。

安装istio前需要先安装些什么?

安装istio前要先安装docker、minikube。关联到的应用名软件有:

  • docker
  • minikube
  • hello-minikube
  • bookinfo
  • kiali
  • istio
  • kubectl
  • istioctl

三、安装步骤

3.1、Docker安装

  • 更新 Ubuntu 20.04 系统的包信息,并安装使用 HTTPS 来访问 Docker 软件的工具包。
sql 复制代码
apt update
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  • 导入 Docker 的官方 GPG 密钥,并添加 Docker APT 软件源。
markdown 复制代码
curl -fsSL [4](https://download.docker.com/linux/ubuntu/gpg) | sudo apt-key add -
add-apt-repository "deb [arch=amd64] [5](https://download.docker.com/linux/ubuntu) $(lsb_release -cs) stable"
  • 安装最新版本的 docker-ce。
sql 复制代码
apt update
apt install docker-ce

验证 Docker 是否已经成功安装,您可以运行一个测试容器。

docker -v

到这里docker就安装好了,如果速度慢可以修改一下docker国内源。

3.2、k8s-minikube安装

安装minikube,并启动 minikube。

  • 下载 minikube 的二进制文件,并将其安装到 /usr/local/bin 目录下。
ruby 复制代码
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
  • 下载 kubectl 的二进制文件,并将其安装到 /usr/local/bin 目录下。
bash 复制代码
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
sudo install kubectl /usr/local/bin/kubectl
  • 启动 minikube
css 复制代码
minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=1.23.8

p.s.如果安装好了,下次机器重启使用minikube start就可以启动minikube了。

  • 启动后,查看一下安装了哪些pod
arduino 复制代码
kubectl get pods -A
  • 现在我们来测试一下minikube环境,安装一个测试应用
ini 复制代码
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0 
kubectl expose deployment hello-minikube --type=NodePort --port=8080
  • 查询安装的情况(需要等待一会执行,因为此时需要pull相应的docker镜像)
arduino 复制代码
kubectl get pods
arduino 复制代码
kubectl get services hello-minikube

可以看到已经在minikube环境下部署好到hello-minikube应用,我们来方式试试。

一般来说k8s访问service的方式是主机ip+nodeport端口,可以发现这样是访问不了的。这里有点不一样,就是之前说的minikube本身就是个虚拟机,k8s是部署在minikube虚拟机上的。所以我们要先获取minikube虚拟机的ip再加上nodeport的端口来访问。

arduino 复制代码
# minikube ip
192.168.49.2
# curl 192.168.49.2:31322

还有一种比较简单的方式获取访问地址的方式:minikube service hello-minikube --url

输入以上命令地址就会直接输入了。

  • 那么如何在主机上访问hello-minikube呢?

通过以下端口转发的方式这种就可以在主机访问它了。执行后会在前台启动,不要关闭,关闭就不效果了。当然你想在后台启动它就用nohub来启动。

bash 复制代码
kubectl port-forward service/hello-minikube 7080:8080

再开个窗口,curl localhost:7080

p.s.关于minikube网络我们也可以尝试一下在主机上执行以下命令

ruby 复制代码
#结果就是主机上只有minikube这个容器
root@ubuntu:/# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED        STATUS        PORTS                                                                                                                                  NAMES
5ee755138e97   kicbase/stable:v0.0.42   "/usr/local/bin/entr..."   23 hours ago   Up 23 hours   127.0.0.1:32772->22/tcp, 127.0.0.1:32771->2376/tcp, 127.0.0.1:32770->5000/tcp, 127.0.0.1:32769->8443/tcp, 127.0.0.1:32768->32443/tcp   minikube
#进入容器,类似进入虚拟机
root@ubuntu:/# docker exec -it 5ee755138e97 bash
#发现在容器里执行curl localhost:31322就可以访问
root@minikube:/# curl localhost:31322
Request served by hello-minikube-fdf664d87-zftgp

HTTP/1.1 GET /

Host: localhost:31322
Accept: */*
User-Agent: curl/7.81.0

到这时minikube就安装与测试完成。

3.3、istio安装步骤

  • 下载 istio 的安装包
arduino 复制代码
curl -L https://istio.io/downloadIstio | sh -

下载后,解压到/usr/local/istio

  • istioctl 命令添加到 PATH 中。
bash 复制代码
export PATH=/usr/local/istio/bin:$PATH

这里是临时生效,如果要永久生成就修改vi /etc/profile。

  • 查看是否安装成功
arduino 复制代码
istioctl version
no running Istio pods in "istio-system"
1.12.1
  • 使用 istioctl install 命令安装 istio,并选择一个合适的配置文件,例如 demo。
    • 安装 istio,并使用 demo 配置文件,该配置文件启用了高级别的追踪和访问日志,以及额外的组件,例如 Egress gateway 和 Ingress gateway。
ini 复制代码
istioctl install --set profile=demo
istioctl version

再执行stioctl version就已经有安装好的东西了。

当然也可以通过以下命令,看看安装了些什么

sql 复制代码
kubectl -n istio-system get deploy

此至istio就搭建完成了,后面还有篇介绍istio简单使用与测试的文章,大家感兴趣也可以接着看一看。

相关推荐
默 唁4 小时前
win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录
docker·容器
计算机毕设定制辅导-无忧学长5 小时前
Docker 与持续集成 / 持续部署(CI/CD)的集成(一)
ci/cd·docker·容器
Yuanymoon6 小时前
Docker 修改配置后无法启动问题
运维·docker·容器
阿猿收手吧!9 小时前
【Docker】Docker中卷的类型、区别及应用
开发语言·docker·容器·eureka
青啊青斯9 小时前
Windows搭建CUDA大模型Docker环境
windows·docker·容器
提笔忘字的帝国11 小时前
Centos 7安装docker
linux·docker·centos
茅坑的小石头12 小时前
CentOS系统docker配置镜像加速registry-mirrors,配置阿里云和道客
运维·docker·容器
喝水塞牙12 小时前
使用docker部署NextChat,使用阿里云、硅机流动、deepseek的apikey
阿里云·docker·容器
m0_7482455212 小时前
使用 Docker 部署 RabbitMQ 的详细指南
docker·容器·rabbitmq
liulanba13 小时前
八股取士--docker&k8s
docker·容器·kubernetes