Linkerd 2.10(Step by Step)—Linkerd 和 Pod 安全策略 (PSP)

简介: Linkerd 2.10(Step by Step)—Linkerd 和 Pod 安全策略 (PSP)

Linkerd 控制平面带有自己的最低特权 Pod Security Policy 和相关的 RBAC 资源。仅当启用 PodSecurityPolicy admission controller 时,才会强制执行此 Pod 安全策略。

要查看控制平面的 Pod 安全策略的定义,请运行:


kubectl describe psp -l linkerd.io/control-plane-ns=linkerd


调整上述标签的值以匹配您的控制平面的命名空间。

请注意,为了最小化攻击面,除了 NET_ADMINNET_RAW 功能外, 所有 Linux 功能都从控制平面的 Pod 安全策略中删除。这些功能为 proxy-init init 容器提供了运行时特权 来重写 pod 的 iptable。请注意,将这些功能添加到 Pod 安全策略不会使容器成为特权容器。控制平面的 Pod 安全策略使用 allowPrivilegeEscalation: false 策略防止容器 privileged。要了解 NET_ADMINNET_RAW 功能的完整含义,请参阅 Linux 功能 manual。


如果您的环境不允许运行具有升级 Linux 功能的容器, 则可以使用不需要 NET_ADMINNET_RAW 功能 的 CNI plugin 安装 Linkerd。


Linkerd 没有为数据平面提供任何默认的 Pod 安全策略, 因为这些策略会根据您的应用程序的安全要求而有所不同。Linkerd 代理 sidecar 容器的安全上下文要求与 控制平面的 Pod 安全策略中定义的要求非常相似。


例如,以下 Pod 安全策略和 RBAC 将与注入的 emojivoto demo 应用程序一起使用:


apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: linkerd-emojivoto-data-plane
spec:
  allowPrivilegeEscalation: false
  fsGroup:
    ranges:
    - max: 65535
      min: 10001
    rule: MustRunAs
  readOnlyRootFilesystem: true
  allowedCapabilities:
  - NET_ADMIN
  - NET_RAW
  - NET_BIND_SERVICE
  requiredDropCapabilities:
  - ALL
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    ranges:
    - max: 65535
      min: 10001
    rule: MustRunAs
  volumes:
  - configMap
  - emptyDir
  - projected
  - secret
  - downwardAPI
  - persistentVolumeClaim
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: emojivoto-psp
  namespace: emojivoto
rules:
- apiGroups: ['policy','extensions']
  resources: ['podsecuritypolicies']
  verbs: ['use']
  resourceNames: ['linkerd-emojivoto-data-plane']
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: emojivoto-psp
  namespace: emojivoto
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: emojivoto-psp
subjects:
- kind: ServiceAccount
  name: default
  namespace: emojivoto
- kind: ServiceAccount
  name: emoji
  namespace: emojivoto
- kind: ServiceAccount
  name: voting
  namespace: emojivoto
- kind: ServiceAccount
  name: web
  namespace: emojivoto


请注意,Linkerd 代理在没有 Linkerd CNI 的情况下运行时 只需要 NET_ADMINNET_RAW 功能,并且它使用 UID 2102 运行。

相关文章
Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
164 0
|
Kubernetes 负载均衡 网络协议
Linkerd 2.10(Step by Step)—Ingress 流量
Linkerd 2.10(Step by Step)—Ingress 流量
213 0
|
Kubernetes 安全 网络协议
Linkerd 2.10(Step by Step)—暴露 Dashboard
Linkerd 2.10(Step by Step)—暴露 Dashboard
240 0
|
Kubernetes Docker 容器
Linkerd 2.10(Step by Step)—安装 Linkerd
Linkerd 2.10(Step by Step)—安装 Linkerd
370 0
|
Kubernetes 关系型数据库 MySQL
Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd
Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd
167 0
|
存储 算法 容器
Linkerd 2.10(Step by Step)—使用 Helm 安装 Linkerd
Linkerd 2.10(Step by Step)—使用 Helm 安装 Linkerd
294 0
|
存储 Kubernetes API
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
673 0
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
|
Kubernetes Perl 容器
Linkerd 2.10(Step by Step)—优雅的 Pod 关闭
Linkerd 2.10(Step by Step)—优雅的 Pod 关闭
186 0
|
测试技术 应用服务中间件 nginx
Kubernetes----Deployment控制器实现版本金丝雀发布
Kubernetes----Deployment控制器实现版本金丝雀发布
382 0
|
Kubernetes 测试技术 应用服务中间件
Kubernetes的service mesh – 第五部分:DogFood环境,Ingress和Edge路由
概述 在这篇文章中,我们将向您展示如何使用Linkerd实现的Service Mesh来处理Kubernetes上的入口流量,在Service Mesh中的每个实例上分发流量。我们还将通过一个完整的例子来介绍Linkerd的高级路由功能:如何将特定的请求路由到较新版本的应用实例上,比如用于内部测试的、预发布的应用版本。
1379 0