키오스크가 있는 Space boxing 사용자 계정




Kiosk은 다음을 사용하여 네임스페이스를 격리하는 CRD 기반 접근 방식입니다.
  • 격리되고 리소스 할당량이 적용되는 "공간"이라는 네임스페이스에 대한 래퍼
  • 이러한 공간 내에서 작동하는 "계정"이라고 하는 사용자(및 서비스 계정)에 대한 래퍼
  • 위의 관리를 일반화하고 단순화하기 위한 AccountQuota 및 템플릿과 같은 구성 템플릿


  • 건축물



    Credit: https://github.com/loft-sh/kiosk




    할 수 있는 사람

    모든 키오스크 설정은 ClusterAdmin(또는 충분한 RBAC 권한이 있는 사용자)이 수행해야 합니다.
  • 관리자인지 확인

  • ❯ kubectl auth can-i "*" "*" --all-namespaces
    kubectl auth can-i "*" namespace
    kubectl auth can-i "*" clusterrole
    kubectl auth can-i "*" crd
    yes
    yes
    yes
    yes
    




    키오스크 설정 및 사용자 가장
  • 키오스크 설치

  • # Install kiosk with helm v3
    ❯ 
    kubectl create namespace kiosk
    helm install kiosk --repo https://charts.devspace.sh/ kiosk --namespace kiosk --atomic
    namespace/kiosk created
    NAME: kiosk
    ...
    Learn more about using kiosk here: https://github.com/loft-sh/kiosk#getting-started
    
    #verify
    ❯ kubectl get pod -n kiosk
    NAME                     READY   STATUS    RESTARTS   AGE
    kiosk-66dbfcf6db-5rfx2   1/1     Running   0          2m18s
    


  • 일부 계정 만들기

  • cat account.yaml
    apiVersion: tenancy.kiosk.sh/v1alpha1
    kind: Account
    metadata:
      name: ambers-account
    spec:
      subjects:
      - kind: User
        name: amber
        apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: tenancy.kiosk.sh/v1alpha1
    kind: Account
    metadata:
      name: blues-account
    spec:
      subjects:
      - kind: User
        name: blue
        apiGroup: rbac.authorization.k8s.io
    ---
    ❯ kubectl apply -f account.yaml
    account.tenancy.kiosk.sh/ambers-account created
    account.tenancy.kiosk.sh/blues-account created
    
    # Check RBAC
    ❯ kubectl get account.tenancy.kiosk.sh
    NAME             SPACES   CREATED AT
    ambers-account   0        2022-07-03T01:16:41Z
    blues-account    0        2022-07-03T01:16:41Z
    ❯ kubectl get accounts --as=amber
    NAME             SPACES   CREATED AT
    ambers-account   0        2022-07-03T01:16:41Z
    



    메모
    현실 세계에서 사용자는 외부 시스템을 통해 들어오고 일반적으로 Dex와 같은 시스템을 통해 인증됩니다(또는 퍼블릭 클라우드에 있는 경우 EKS용 AWS IAM 또는 GKE용 GCP IAM과 같은 공급자별 솔루션을 사용할 수 있습니다. ).
    실제 사용자 대신 서비스 계정의 경우 확인this


    공간 작업

    공백은 네임스페이스에 대한 래퍼입니다. 사용자는 할당된 공간을 다른 사용자가 사용하고 운영할 수 있습니다.
    거부되고 보이지 않습니다.

    cat spaces.yaml
    apiVersion: tenancy.kiosk.sh/v1alpha1
    kind: Space
    metadata:
      name: ambers-space
    spec:
      # spec.account can be omitted if the current user only belongs to a single account
      account: ambers-account
    ---
    apiVersion: tenancy.kiosk.sh/v1alpha1
    kind: Space
    metadata:
      name: blues-space
    spec:
      # spec.account can be omitted if the current user only belongs to a single account
      account: blues-account
    ---
    ❯ k create -f spaces.yaml
    space.tenancy.kiosk.sh/ambers-space created
    space.tenancy.kiosk.sh/blues-space created
    # Verify 
    ❯ k get spaces --as=amber
    NAME           OWNER            CREATED AT
    ambers-space   ambers-account   2022-07-03T01:22:44Z
    


    리소스 만들기

    ❯ k create deployment test-dep-001 --image=nginx --as=amber --namespace=ambers-space
    deployment.apps/test-dep-001 created
    ❯ k create deployment test-dep-002 --image=nginx --as=amber --namespace=blues-space
    error: failed to create deployment: deployments.apps is forbidden: User "amber" cannot create resource "deployments" in API group "apps" in the namespace "blues-space"
    
    # Verify
    ❯ k get deployments.apps -n ambers-space
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    test-dep-001   0/1     1            0           28s
    ❯ k get deployments.apps -n blues-space
    No resources found in blues-space namespace.
    




    리소스 삭제



    ❯ k delete space blues-space --as=blue
    Error from server (Forbidden): spaces.tenancy.kiosk.sh "blues-space" is forbidden: User "blue" cannot delete resource "spaces" in API group "tenancy.kiosk.sh" at the cluster scope
    ❯ k delete space blues-space
    space.tenancy.kiosk.sh "blues-space" deleted
    



  • Allow account-users to create and delete spaces 사용


  • 템플릿

    키오스크의 템플릿은 네임스페이스를 초기화하고 네임스페이스 전체에 공통 리소스(예: 비밀)를 적용하는 데 사용됩니다.
    공간을 생성할 때 키오스크는 이러한 템플릿을 사용하여 이 공간에 대해 새로 생성된 네임스페이스를 채웁니다.
    템플릿:
  • 에는 하나 이상의 kubernetes 매니페스트 또는 helm 호출
  • 이 포함될 수 있습니다.
  • TemplateInstance에서 관리 및 관리(각 네임스페이스에서)
  • 은 사용자 정의 가능성을 위해 매개변수화할 수 있습니다
  • .

    매니페스트 만들기
  • sample

  • 계정과 연결
  • sample

  • 템플릿 인스턴스화
  • sample

  • [템플릿에 대한 자세한 정보]( https://github.com/loft-sh/kiosk#53-using-templates )


    여러 가지 잡다한
  • 계정 기본값

  • cat account-default-space-metadata.yaml
    apiVersion: tenancy.kiosk.sh/v1alpha1
    kind: Account
    metadata:
      name: alpha-space-default-metadata
    spec:
      space:
        clusterRole: kiosk-space-admin
        spaceTemplate:
          metadata:
            labels:
              some-label: "label-value"
              other-label: "other-value"
            annotations:
              "foo": "bar"
              "department": "alpha"
      subjects:
      - kind: User
        name: adam
        apiGroup: rbac.authorization.k8s.io
      - kind: User
        name: brian
        apiGroup: rbac.authorization.k8s.io
    ❯ k create -f account-default-space-metadata.yaml
    account.tenancy.kiosk.sh/alpha-space-default-metadata created
    ❯ k describe account alpha-space-default-metadata 
    ...
    Name: alpha-space-default-metadata
    Namespace: null
    Spec:
      Space:
        Cluster Role: kiosk-space-admin
        Space Template:
          Metadata:
            Annotations:
              Department: alpha
              Foo: bar
            Creation Timestamp: <nil>
            Labels:
              Other - Label: other-value
              Some - Label: label-value
      Subjects:
        API Group: rbac.authorization.k8s.io
        Kind: User
        Name: brian
    Status: null
    


  • Space limit
  • Account quotas




  • 결론

    키오스크는 템플릿 개념으로 매우 강력해 보이지만 문서(해당 부분)는 간단하지 않습니다.
    (문서 풀 요청일 수 있습니까?)

    좋은 웹페이지 즐겨찾기