云原生应用综合练习上

前面分类介绍各模块知识,此篇博客将开展综合练习,练习的例子是Istio官网的bookinfo这个应用。bookinfo的架构如下所示,可以看到不同的服务才用了不同的技术栈,但是通过image部署,可以屏蔽掉不同技术栈带来的部署差异问题。

productpage会调用details和reviews两个微服务,用来生成前端页面。
details中包含了书籍的信息。
reviews中包含了书籍相关的评论,它会调用ratings微服务。
ratings中包含了由书籍评价组成的评级信息。
reviews有3个版本,可用来展示各服务间的链路调用关系
v1版本不会调用ratings服务。
v2版本会调用ratings服务,并使用1到5个黑色图标显示评分信息。
v3版本会调用ratings服务,并使用1到5个红色图标显示评分信息。

综合练习中将涉及9个小案例练习,具体练习如下所示:

  一:接下来开始第一个Task练习:将bookInfo应用发布到Istio Ingress网关

1.1:用如下命令安装Istio。

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.xx.0
cp bin/istioctl /usr/local/bin
istioctl install --set profile=demo -y

1.2:将Istio官网下的BookInfo应用和网关配置copy过来,部署到集群上,yaml文件地址如下

samples/bookinfo/platform/kube/bookinfo.yaml
samples/bookinfo/networking/bookinfo-gateway.yaml

bookinfo-gateway.yaml文件的配置如下所示,可以看到VirtualService中将流量导入到后端的productpage应用上。

 1.3:查看Istio Ingress的svc的端口信息。

1.4:在外网通过node节点IP地址+svc端口信息访问bookinfo应用中的productpage,访问结果如下所示,说明应用被成功发布到了网关上。

二:接下来进行第二个Task,增加安全机制,将http访问方式转换成https

2.1: 生成x509的证书并存放到secret对象里面。因为是通过node节点IP访问的应用,所有生成证书时Inc./CN=node节点IP。

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=cncamp Inc./CN=node节点IP' -keyout bookinfo.key -out bookinfo.crt
kubectl create -n istio-system secret tls bookinfo-credential --key=bookinfo.key --cert=bookinfo.crt

2.2: 配置新的Gateway,Gateway里面配置上https的credentials.

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: https-bookinfo
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: bookinfo-credential

2.3:在safari上通过https方式访问应用,信任网站后,访问成功。结果如下(备注:如果用chrome访问会失败,因为是自签发的证书)。因为是https方式,所以这里是node节点IP加31287端口。

三:接下来开始第三个Task,开启mTLS

3.1:通过productpage 的SVC地址访问应用,访问成功。

3.2:在isto-system根namespace下创建PeerAuthentication对象.

(kubectl apply -f mtls.yaml -n istio-system)

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: "default"
spec:
  mtls:
    mode: STRICT

 3.3: 再次通过SVC地址应用,访问会失败,request被peer reset了。

 浏览器通过https访问应用,仍然能成功。

可以看到通过启动全链路的mTLS,这样不在Istio管控内的直接去访问后端应用是不成功,但是浏览器访问仍然成功,因为浏览器是把请求发送给Istio Ingress Gateway,Gateway再转发到后端服务。这样从浏览器到Ingress Gateway是单向的TLS访问,Gateway到后端服务是mTLS,这样就增强了访问的安全。

第四:接着再进入第四个Task,给应用进行认证和授权,保证被允许的客户端才能访问到应用。

4.1: 创建RequestAuthentication和AthorizationPoliy.RequestAuthentication中定义了如果访问details服务,需要验证token。AuthorizationPoliy中定义访问服务的客户端必须带上由“testing@secure.istio.io/testing@secure.istio.io”签发的Token才允许访问。

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: "details"
spec:
  selector:
    matchLabels:
      app: details
  jwtRules:
    - issuer: "testing@secure.istio.io"
      jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.12/security/tools/jwt/samples/jwks.json"
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: require-jwt
spec:
  selector:
    matchLabels:
      app: details
  action: ALLOW
  rules:
    - from:
        - source:
            requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]

4.2:查看ProductPage服务,这个服务就访问了Details服务。

4.3:创建上面的认证和授权对象后,再次访问productpage服务,可以看到details服务已经无法访问了。因为productpage在访问details服务时并没有带着token进行访问。

4.4:如果要重新访问details服务,那么productpage服务需要进行代码修改,带上有效token访问details才行。通过上面的例子可以看到通过配置认证和授权,微服务间的访问都需要带上有效token才行,而客户端在获取token时,就能对客户端进行认证和授权。通过这种方式让微服务间的访问更加安全。

五:接下来再演示如果浏览器中输入了http,如何自动跳转成https访问方式,让客户体验更好

5.1:配置Gateway,增加https redirect跳转即可完成自动跳转。

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: https-bookinfo
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: bookinfo-credential
    - hosts:
        - '*'
      port:
        name: http-bookinfo
        number: 80
        protocol: HTTP
      tls:
        httpsRedirect: true

5.2:在集群里面,通过ingress gateway的svc的IP地址访问productpage,用http方式访问,http映射到80端口,可以看到会自动化跳转到443端口上,也就是https方式访问。

以上就是对前面五个场景的练习,在下一篇博客中将对后面4个场景进行练习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值