开发者学堂课程【微服务实战-Service Mesh 与 Istio:在阿里云安装初试 Istio】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/620/detail/9435
在阿里云安装初试 Istio
目录:
一、在阿里云创建K8s集群
二、Bookinfo 应用实例
三、Bookinfo 应用部属 sidecar 后
四、安装 istio-ingressgate
学习完本课程后,你将能够:
1.在阿里云创建 K8s集群
2.在阿里云 K8s 集群上安装 lstio
3.安装 lstio demo app
4.测试安装
一、在阿里云创建 K8s集群
如没有安装 Kubectl,请安装。
https://kubernetes.io/docs/tasks/tools/install-kubectl/
拷贝 kube config 到本地
点击链接,点击产品分类,它会弹出来,在这里,有这个容器服务 kubernetes 版,如果已经开通了就到管理控制台,可以创建一个 kubernetes 集群。它有不同的种类,选择其中一种:标准专有集群,并取一个名字,选择一个地区,付费选择按量付费或包年包月,取消自动续费。
虚拟交换机
节点类型:包年包月
此时三个节点就够了,不需要改动。kubernetes 版本是12.6.需要新建密钥,登录到 worknotes 等。
检测都通过后可以开通,需要一段时间。创建完成后返回集群列表。
将文件拷贝下来,保存起来。
IUS- -169691-MP: .kube andy.shi$viconfig
[US- -169691-MP: .kube andy.shi$ kubectl get pods .Noresource Sfound .
US- -169691-MP: . kube! andy. shi$
接下来要在 kubernetes 上安装 instio,找到刚才创建的集群,点击更多,有一个选项:部署instio,有一些基本的配置。有创建默认的入口网站等,grafana 的用户名和密码需要牢牢记住,都是 admin.使用默认的选项来部署 instio,helm 发布列表。
最后检查,US-169691-MP:.kube andy.shi$ kubecti get pods --all-namespaces。
检查结果是所有的 pod 都在运行,显示 running。也就是说,此时的安装时成功的。
二、Bookinfo应用实例
接下来要下载 Bookinfo,它是一个多语言多语种的应用程序。我们可以克隆网址,
https://github.com/istio/istio/tree/master/samples/bookinfo多语言,多个微服务 Sidecar auto injection
安装应用到 K8s.上
现在的 instio 是新的版本,会自动加注
US-169691-MP:istio andy.shiS kubectl label namespace default istio-injection=enabled
当前的 namespace 是可以被 injection 接受的。不需要额外的操作步骤了。
使用相对路径:
US- 169691-MP:istio andy. shi$ kubectl label namespace default istio-injection=enabled
error: ' istio-injection' already has a value (enabled), and --overwrite is falseL-) BJEzUS- -169691-MP:istio andy.shi$ kubectl apply -f samples/bookinfo/platform/ kube/ bookinfo. yamlservice/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
US- 169691- -MP:istio andy.shi$ kubectl get svc
此时安装完成,service 已经起来了,pod 也起来了。
寻找容器,第一个是 Bookinfo,第二个是 registry.有两个容器在一个pod里。
所有的交通流量都通过 sidecar 完成。应用安装完后测试,输入一个指令:US-169691-MP;istio andy.shiS kubectl exec -it S(kubectl get pod -l app=ratings -o
jsonpath='.items[0].metadata.namne}') -c ratings -- curl productpage:9080/productpage. i grep -o<title>Simple Bookstore App</title>US-169691-MP:istio andy.shi
到了容器里做了curl 指令,因为微服务之间来联系。
所以看起来很复杂,现在没有办法从互联网访问page。
三、Bookinfo 应用部属 sidecar 后
部署 sidecar 后的微服务器的情况,主要的是微服务之前都有一个 sidecar,决定了所有的流量都是从这个 sidecar 进出。
服务没有直接访问,因为 gateway 代理,有进出两个方向,以前叫作 ingress,进方向全部都是黑名单除非拉了白名单,出方向全部都是白名单除非拉了黑名单。出方向所有的流量都是走的通的。
name: bookinfo-gateway
spec :
selector :
istio: ingressgateway //
默认关口# use istio default controllerservers :
port:
number: 80//
端口28
name: http//
支持的协议 http
protocol: HTTP
hosts :
apiVersion: networking. istio. io/ v1alpha3kind: VirtualService
metadata:
name :boo kinfo
spec :
hosts:
"* "gateways:
这就是 gateway 的创建,创建后就可以访问网页了。
四、安装 istio-ingressgate
刚才在gateway的文件中用了 istio-ingressgate,要保留创建的入口网关,在配置的时候已经把路径,虚拟服务器挂到上面去了,现在需要找到 ip 地址,这样的话可以访问了。
US-169691-MP:istio andy.shi$ kubectl get svc istio-ingressgateway -n istio-systemNAMETYPE
CLUSTER- -IP
EXTERNAL-IPPORT(S)
AGE
istio-ingres sgatewayLoadBalancer172.21.12.220
39.97.6.167 I 15020 :31803/TCP , 80:31380/TC//对外的ip
P, 443:31390/ TCP , 15443:32414/TCP23h
US- -169691-MP:istio andy.shi$]
//端口号也有了,http://39.97.6.167.此时安装完成。