文章目录
-
-
- [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 应用,四个单独的微服务:
- productpage:这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。
- details:这个微服务中包含了书籍的信息。
- reviews:这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
- 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