[Kubernetes] Istio on Kubernetes 实践

文章目录

      • [1.Kubernetes 创建](#1.Kubernetes 创建)
      • [2.Istio 部署](#2.Istio 部署)
        • [2.1 下载 Istio](#2.1 下载 Istio)
        • [2.2 安装 Istio](#2.2 安装 Istio)
      • [3.Istio on Kubernetes 实践](#3.Istio on Kubernetes 实践)
        • [3.1 部署 Bookinfo 示例应用](#3.1 部署 Bookinfo 示例应用)
        • [3.2 确定入站 IP 和端口](#3.2 确定入站 IP 和端口)

1.Kubernetes 创建

主机名 内部ip 外部ip
master 192.168.66.2 139.198.36.40
node1 192.168.66.3 139.198.1.192
node2 192.168.66.4 139.198.32.227

采用的是kubeky的方式创建k8s集群。

bash 复制代码
kubectl get nodes
bash 复制代码
kubectl get pods -A

2.Istio 部署

2.1 下载 Istio
bash 复制代码
curl -L https://istio.io/downloadIstio | sh -

或者在github上下载:

bash 复制代码
cd istio-1.10.0

#将 istioctl 客户端添加到路径
export PATH=$PWD/bin:$PATH
2.2 安装 Istio

对于本次安装,我们采用 demo 配置组合。 选择它是因为它包含了一组专为测试准备的功能集合,另外还有用于生产或性能测试的配置组合。

Bookinfo 应用,四个单独的微服务:

  1. productpage:这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。
  2. details:这个微服务中包含了书籍的信息。
  3. reviews:这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
  4. ratings:这个微服务中包含了由书籍评价组成的评级信息。
bash 复制代码
istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
bash 复制代码
#给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理:
kubectl label namespace default istio-injection=enabled
namespace/default labeled

3.Istio on Kubernetes 实践

说明: Istio部署应用的时候, service会开启两个pod, 其中第二个pod为sidecar。

3.1 部署 Bookinfo 示例应用
bash 复制代码
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created

应用很快会启动起来。当每个 Pod 准备就绪时,Istio 边车将伴随应用一起部署。

bash 复制代码
$ kubectl get services
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.0.0.212      <none>        9080/TCP   29s
kubernetes    ClusterIP   10.0.0.1        <none>        443/TCP    25m
productpage   ClusterIP   10.0.0.57       <none>        9080/TCP   28s
ratings       ClusterIP   10.0.0.33       <none>        9080/TCP   29s
reviews       ClusterIP   10.0.0.28       <none>        9080/TCP   29s


$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-558b8b4b76-2llld       2/2     Running   0          2m41s
productpage-v1-6987489c74-lpkgl   2/2     Running   0          2m40s
ratings-v1-7dc98c7588-vzftc       2/2     Running   0          2m41s
reviews-v1-7f99cc4496-gdxfn       2/2     Running   0          2m41s
reviews-v2-7d79d5bd5d-8zzqd       2/2     Running   0          2m41s
reviews-v3-7dbcdcbc56-m8dph       2/2     Running   0          2m41s

在请求的时候部署一个网关:

bash 复制代码
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

所有的微服务都和 Envoy Sidecar 集成在一起,被集成服务所有的出入流量都被 Sidecar 所劫持, 这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。

3.2 确定入站 IP 和端口
bash 复制代码
$ kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                      AGE
istio-ingressgateway   LoadBalancer   172.21.109.129   130.211.10.121  80:31380/TCP,443:31390/TCP,31400:31400/TCP   17h
bash 复制代码
kubectl get svc -n istio-system
  • kiali: 流控
  • jaeger-controller: 链路跟踪
bash 复制代码
kubectl edit svc kiali -n istio-system

type修改为NodePort

相关推荐
木易双人青6 小时前
01-Docker-简介、安装与使用
运维·docker·容器
罗不俷11 小时前
【RH134知识点问答题】第13章:运行容器
容器·rhel
tb_first15 小时前
k8sday11服务发现(2/2)
docker·云原生·容器·kubernetes·k8s
zxcxylong17 小时前
almalinux9.6系统:k8s可选组件安装(1)
云原生·容器·kubernetes·metrics·almalinux·hpa·vpa
一个天蝎座 白勺 程序猿21 小时前
Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
数据库·深度学习·kubernetes·apache·时序数据库·iotdb
xiao-xiang1 天前
redis-集成prometheus监控(k8s)
数据库·redis·kubernetes·k8s·grafana·prometheus
MANONGMN1 天前
Kubernetes(K8s)常用命令全解析:从基础到进阶
云原生·容器·kubernetes
Johny_Zhao1 天前
基于 Docker 的 LLaMA-Factory 全流程部署指南
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·yum源·系统运维·llama-factory
陈陈CHENCHEN1 天前
【Kubernetes】在 K8s 上部署 Prometheus
kubernetes·prometheus
郝同学的测开笔记2 天前
从漏洞到防护:如何为你的CronJob添加RBAC安全层?
云原生·kubernetes·测试