2.3 启动bookinfo
进入istio安装目录:/home/tools/istio-1.0.6/samples/bookinfo/platform/kube
找到bookinfo.yaml文件
查看需要的image个数:
cat bookinfo.yaml | grep image:
里面就是bookinfo案例所需要依赖的镜像地址
- 执行命令
kubectl apply -f bookinfo.yaml -n bookinfo-ns
- 查看pod情况
kubectl get pods -n bookinfo-ns # 会发现有两个container,有两个container的原因是因为我们有自动注入,这边有六个服务,其实只要四个服务,有一个服务有三个版本仅此而已
- 查看pod明细
kubectl describe pods pod名字 -n bookinfo-ns # 例如:kubectl describe pods reviews-v1-fd6c96c74-cmqcx -n bookinfo-ns
会发现有两个container,一个是我们自己的container,另外一个是自动注入的代理container
- 检查一下service
kubectl get svc -n bookinfo-ns
可以看到service的类似clusterip类型
- 验证Bookinfo 应用是否正在运行
请在某个 Pod 中用 curl
命令对应用发送请求,例如 ratings
- 执行命令
kubectl exec -it $(kubectl get pod -l app=ratings -n bookinfo-ns -o jsonpath='{.items[0].metadata.name}') -c ratings -n bookinfo-ns -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
看到如图所示表示bookinfo启动成功
命令分析一下
kubectl get pod -l app=ratings -n bookinfo-ns -o jsonpath='{.items[0].metadata.name}';表示的是输出ratings 这个运行时pod的名字
kubectl exec -it $(kubectl get pod -l app=ratings -n bookinfo-ns -o jsonpath='{.items[0].metadata.name}') -c ratings -n bookinfo-ns -- curl productpage:9080/productpage | grep -o "<title>.*</title>":进入到ratings内部,然后发送一个http测试,根据响应结果找到title标签
思考:能否通过页面的方法访问bookinfo项目呢
所以下面我们用ingress方式访问bookinfo
2.4 通过ingress方式访问
- 找到productpage-service服务的端口,打开bookInfo.yaml文件
需要给productpage暴露的9080端口进行ingress域名绑定
- 新建productpageIngress.yaml
#ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: name: productpage-ingress spec: rules: - host: productpage.istio.qy.com http: paths: - path: / backend: serviceName: productpage servicePort: 9080
- 查询productpage这个pod分布在那台服务上,执行命令
kubectl get pods -o wide -n bookinfo-ns
服务发现在w1机器上
- 配置hosts文件
192.168.187.137 productpage.istio.qy.com
- 执行命令
kubectl apply -f productpageIngress.yaml -n bookinfo-ns
- 访问地址:productpage.istio.qy.com
点击Normal user,查看书籍相关的评论
不停的刷新会有三个Reviews版本一个是不带星的一个是带黑色星的一个是带红星的,跟架构图一样的
2.5 通过istio的ingressgateway访问
2.5.1 确定 Ingress 的 IP 和端口
现在 Bookinfo 服务启动并运行中,需要使应用程序可以从外部访问 Kubernetes 集群,例如使用浏览器。可以用Istio Gateway来实现这个目标。
为应用程序定义 Ingress 网关
地址:/home/tools/istio-1.0.6/samples/bookinfo/networking有一个bookinfo-gateway.yaml
kubectl apply -f bookinfo-gateway.yaml -n bookinfo-ns
- 查看gateway
kubectl get gateway -n bookinfo-ns
有了gateway之后我们需要配置一些环境变量
配置gateway ip环境
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}') # 把ingressgateway的ip设置成环境变量
分析命令意思
kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}' # 表示获取istio组件ingressgateway组件的ip
也就是说192.168.187.137就是ingressgateway组件的ip
配置gateway端口
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
把ingressgateway的端口设置成环境变量
分析命令意思
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}' # 表示获取istio组件ingressgateway组件的端口
设置gateway地址
把前面的host跟端口组成gateway地址
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
查看INGRESS_PORT环境端口
env | grep INGRESS_PORT
测试
http://192.168.187.137:31380/productpage
不停的刷新会有三个Reviews版本一个是不带星的一个是带黑色星的一个是带红星的,跟架构图一样的