Как отключить приглашение weavescope shell / bash для запуска контейнеров - PullRequest
0 голосов
/ 14 марта 2019

Как отключить оболочку exec (приглашение shell / bash), чтобы никто не мог войти в работающий контейнер от имени пользователя root?

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Если вы используете weave scope в вашей производственной среде, вам может потребоваться ограничить две основные вещи:

1. Доступ к оболочке рабочего узла K8s и доступ к оболочке Pods

Для отключения элементов управления weave scope предоставляет готовое решение, зонд "--probe.no-controls=true", который необходимо передать в качестве аргумента запуска вашему weave-scope-agent .

Итоговый файл будет выглядеть так:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: weave-scope-agent
  labels:
    name: weave-scope-agent
    app: weave-scope
    weave-cloud-component: scope
    weave-scope-component: agent
  namespace: weave
spec:
  minReadySeconds: 5
  selector:
    matchLabels:
      app: weave-scope
  template:
    metadata:
      labels:
        name: weave-scope-agent
        app: weave-scope
        weave-cloud-component: scope
        weave-scope-component: agent
    spec:
      containers:
        - name: scope-agent
          args:
            - '--probe.no-controls=true'
            - '--weave=false'
            - '--mode=probe'
            - '--probe-only'
            - '--probe.kubernetes.role=host'
            - '--probe.docker.bridge=docker0'
            - '--probe.docker=true'
            - 'weave-scope-app.weave.svc.cluster.local.:80'
          image: weaveworks/scope:1.11.2
          imagePullPolicy: IfNotPresent
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
          securityContext:
            privileged: true
          volumeMounts:
            - name: docker-socket
              mountPath: /var/run/docker.sock
            - name: scope-plugins
              mountPath: /var/run/scope/plugins
            - name: sys-kernel-debug
              mountPath: /sys/kernel/debug
      dnsPolicy: ClusterFirstWithHostNet
      hostNetwork: true
      hostPID: true
      tolerations:
        - effect: NoSchedule
          operator: Exists
      volumes:
        - name: docker-socket
          hostPath:
            path: /var/run/docker.sock
        - name: scope-plugins
          hostPath:
            path: /var/run/scope/plugins
        - name: sys-kernel-debug
          hostPath:
            path: /sys/kernel/debug
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1

Пожалуйста, обратите внимание, что я использую флаг - weave = false , потому что я не использую weave в качестве CNI в моем кластере K8s, если вы используете CNI weave, не передавайте этот флаг, может наблюдаться другое неожиданное поведение ,

2. Бобы удалить доступ

Чтобы отключить пользователей плетения для удаления модуля, необходимо поиграть с некоторыми правилами RBAC. Разрешить pod и pod / logs в RBAC и отключить delete verb. После этого пользователь сможет видеть журналы модулей и модулей, но сможет удалять модуль.

Конечный файл RBAC будет выглядеть так:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    name: weave-scope
  name: weave-scope
  namespace: weave
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/log
  - replicationcontrollers
  - services
  - nodes
  - persistentvolumes
  - persistentvolumeclaims
  verbs:
  - get
  - list
  - watch
#- apiGroups:
#  - ""
#  resources:
#  - pods
#  verbs:
#  - delete
- apiGroups:
  - apps
  resources:
  - deployments
  - statefulsets
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - batch
  resources:
  - cronjobs
  - jobs
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources:
  - daemonsets
  - deployments
  - deployments/scale
  - replicasets
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources:
  - deployments/scale
  verbs:
  - update
- apiGroups:
  - storage.k8s.io
  resources:
  - storageclasses
  verbs:
  - list
  - watch
- apiGroups:
  - extensions
  resourceNames:
  - weave-scope
  resources:
  - podsecuritypolicies
  verbs:
  - use
- apiGroups:
  - volumesnapshot.external-storage.k8s.io
  resources:
  - volumesnapshots
  - volumesnapshotdatas
  verbs:
  - list
  - watch
0 голосов
/ 14 марта 2019

Вы должны использовать авторизацию RBAC.

Создание роли без предоставления доступа к подресурсу "pod / exec".т.е.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list", "watch"]

Таким образом, все учетные записи пользователей / служб, связанные с этой ролью, не смогут попасть в модули в определенном пространстве имен.

...