从零开始,一步步构建服务网格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简单使用与测试的文章,大家感兴趣也可以接着看一看。

相关推荐
涔溪2 小时前
Docker简介
spring cloud·docker·eureka
内核程序员kevin3 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
颜淡慕潇5 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
运维&陈同学5 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
葡萄皮Apple5 小时前
[CKS] K8S RuntimeClass SetUp
java·容器·kubernetes
mit6.8246 小时前
[Docker#4] 镜像仓库 | 部分常用命令
linux·运维·docker·容器·架构
诡异森林。8 小时前
Docker--Docker是什么和对Docker的了解
运维·docker·容器
老大白菜8 小时前
goframe开发一个企业网站 验证码17
运维·docker·容器·golang·goframe
IsToRestart10 小时前
Docker 的常用命令有哪些?
java·docker·eureka