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

相关推荐
张忠琳3 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
Elastic 中国社区官方博客4 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
风曦Kisaki7 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着20137 小时前
docker 安装 ,在centos7.9
运维·docker·容器
骑上单车去旅行9 小时前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka
前端Baymax11 小时前
K8s PodCrashLoopBackOff假阳性排查
云原生·容器·kubernetes
spider_xcxc11 小时前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
java_logo11 小时前
Docker Compose 部署 Apache Superset:轻松搭建开源 BI 平台
docker·开源·apache·superset·轩辕镜像·superset部署方案·docker superset
zy happy11 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
阿标在干嘛1 天前
从物理机到K8s:政策快报平台的容器化部署实践
云原生·容器·kubernetes