Service Mesh 之 Istio

Install

istio 有多种安装方法,详细参考 官方文档 这里仅介绍helm的安装方法:

1
2
3
4
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace
helm install istiod istio/istiod -n istio-system --wait
helm install istio-ingress istio/gateway -n istio-ingress --wait --create-namespace

Authorization Policy

Istio 通过 AuthorizationPolicy 支持流量认证,通过 PeerAuthentication 来严格控制应用程序只接受MTLS流量。

CRD 的设计来讲,相比linkerd的3个CRD来定义认证,istio一个CRD(AuthorizationPolicy)即可同时包含认证的源头目标的设定,相对来讲,简单清晰一点。同时AuthorizationPolicy不仅仅可以定义白名单,还可以定义黑名单,自定义认证服务 ,功能上强大一些。

CRD 意义
AuthorizationPolicy 定义流量认证的source,to,action
PeerAuthentication

业务流量认证

linkerd, 演示的服务也选择minio, server/client部分的部署模版基本上一样,除掉:

  • 原来linkerd相关的annotations去除
  • 新增istio相关的label(sidecar.istio.io/inject=true)

所以这里就不单独列minio-server,minio-clientyaml部署示例模版了,只提供auth的部署模版

istio认证示例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-minio-test-client
  namespace: minio-test-server
spec:
  action: ALLOW
  selector:
    matchLabels:
      app: minio
  rules:
  - from:
    - source:
      principals:
      - cluster.local/ns/minio-test-client/sa/minio-test-client

istio 限制访问集群外部服务

待补充

附录