Istio 对等授权的授权策略

问题描述 投票:0回答:1

我正在尝试使用 envoy sidecar 为 etcd 对等 Pod 创建授权策略,以授权访问端口 2380 并拒绝集群中尝试访问对等端口的任何其他 Pod。这些 Pod 属于同一服务。

我尝试将主机(*.etcd-cluster.ns.svc)添加到授权策略中的when条件中,如果主机在请求中不匹配,则需要拒绝该请求。但是,使用 istio 时,主机会发生变化,因为特使会传递流量,但它不起作用。

如何设置特定于 etcd 的简单授权策略,以授权并允许 etcd 对等 Pod 通信,并在尝试访问时拒绝其余 Pod?

kubernetes authorization azure-aks istio etcd
1个回答
0
投票

要实现允许 etcd 对等 pod 在端口 2380 上通信并拒绝访问任何其他 pod 的 Istio AuthorizationPolicy,您需要在运行 etcd pod 的同一命名空间中创建一个

AuthorizationPolicy
资源。

以下是该政策的示例。但在此之前请确保以下事项

识别 Etcd Pod:确保可以通过标签或服务帐户清楚地识别您的 etcd Pod。如果它们尚未标记或使用特定服务帐户,您将需要进行设置。

为 Etcd Pod 创建服务帐户(如有必要):如果它们尚不存在,请为您的 etcd Pod 创建专用的 Kubernetes ServiceAccount。这将允许您根据

source.principal
创建授权策略。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: etcd-peer
  namespace: ns

kubectl apply -f <filename>.yaml
涂抹。 enter image description here

更新您的 etcd 部署配置以使用新创建的服务帐户。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: etcd-cluster
  namespace: ns  # replace with the actual namespace where the etcd pods should run
spec:
  selector:
    matchLabels:
      app: etcd-cluster  # these labels should match the labels in template.metadata.labels
  replicas: 3  # set the number of etcd replicas
  template:
    metadata:
      labels:
        app: etcd-cluster  # these labels should match the labels in spec.selector.matchLabels
    spec:
      serviceAccountName: etcd-peer  # the service account created for etcd
      containers:
      - name: etcd
        image: etcd:latest  # replace with the actual etcd image you want to use
        ports:
        - containerPort: 2380

再次使用

kubectl apply -f <filename>.yaml
进行申请。

enter image description here

创建 Istio AuthorizationPolicy,仅当来自具有

etcd-peer
ServiceAccount 的 Pod 时才允许与端口 2380 进行通信。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: etcd-peer-authz
  namespace: ns  # Replace 'ns' with the actual namespace of the etcd pods
spec:
  selector:
    matchLabels:
      app: etcd-cluster  # Replace with actual labels of the etcd pods
  action: ALLOW
  rules:
  - to:
    - operation:
        ports: ["2380"]
    when:
    - key: source.namespace
      values: ["ns"]  # Replace 'ns' with the actual namespace of the etcd pods
    - key: source.principal
      values: ["cluster.local/ns/ns/sa/etcd-peer"]  

enter image description here

该政策具有以下作用:

  • 它适用于命名空间
    app: etcd-cluster
    内带有标签
    ns
    的 Pod。
  • 如果流量源自同一命名空间,则允许流量到达端口
    2380
  • 它使用
    source.principal
    字段根据原始 Pod 的服务帐户来限制访问。这假设您的 etcd pod 具有可由 Istio 识别的唯一服务帐户或主体。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.