istio应用示例(Bookinfo)在K8S中安装

在部署Bookinfo前应该确保istio已经安装完成。

一、在K8S中部署过程

  1. 将目录切换到istio的安装根目录。

2、将default namespace打上边车自动注入的标记

kubectl label namespace default istio-injection=enabled

3、部署应用Bookinfo。

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

4、确保所有POD和服务运行正常

执行完前一步的命令后确保如下图中的POD都是running

istio应用示例(Bookinfo)在K8S中安装_第1张图片

5、验证Bookinfo应用运行正常。

执行如下命令后应该会返回Simple Bookstore App

kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o ".*"

  • 二、配置从外部访问Bookinfo应用服务

前面已经部署了Bookinfo应用,若要从k8s集群外部(如从浏览器)访问其服务,可用Istio网关实现。

1、为应用定义ingress gateway:

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

2、确认gateway已经成功创建:

kubectl get gateway

3、确定ingress IP and ports

1) 执行以下命令kubectl get svc istio-ingressgateway -n istio-system 查看istio-ingressgateway服务的外部IP

若服务类型为load balancer则EXTERNAL-IP会产生一个IP,但若服务类型是nodeport,则为none,本人的服务是nodeport的,故如上所示为EXTERNAL-IP为none。

2)若服务使用外部load balancer确定ingress ip 和port的方法如下(可选,本人的系统是nodeport的这一段不用)

export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')

3)若服务使用nodeport的情况,则采用如下的命令确定port和ingress ip

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

istio应用示例(Bookinfo)在K8S中安装_第2张图片

采用如下的命令获取并设置ingress ip:

export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')

4)设置GATEWAY_URL

export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

5)确认从集群外部访问Bookinfo应用服务

curl -s http://${GATEWAY_URL}/productpage | grep -o ".*"

应该返回Simple Bookstore App

也可以用web浏览器访问进行验证,如下图

istio应用示例(Bookinfo)在K8S中安装_第3张图片

多刷新几次页面中评价的五星会显示不同颜色,原因是轮流调度到后台多个版本中的一个的。

  • 三、应用默认的目的地规则

若以后要istio去控制Bookinfo的版本路由,需要创建以下的destination rules。

1)如果没有激活双向TLS,执行如下的命令:

kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

2)如果已经激活双向TLS,执行如下的命令:

kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml

然后可以采用如下的命令查询创建结果:

kubectl get destinationrules -o yaml

istio应用示例(Bookinfo)在K8S中安装_第4张图片

  • 四后续

通过以上步骤已经成功创建Bookinfo应用示例,后续可以在该示例上做istio有关流量路由、错误注入、速率限制等实验。

 

你可能感兴趣的:(istio)