2.3. GitOps 리포지토리에 AWS Secrets Manager 리소스 저장


이 가이드에서는 CSI(Secrets Store Container Storage Interface) Driver Operator와 함께 GitOps 워크플로우를 사용하여 AWS Secrets Manager의 시크릿을 OpenShift Container Platform의 CSI 볼륨에 마운트하는 데 도움이 되는 예제를 제공합니다.

중요

SSCSI Driver Operator를 AWS Secrets Manager와 함께 사용하는 것은 호스트된 컨트롤 플레인 클러스터에서 지원되지 않습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
  • ccoctl 바이너리를 추출하여 준비했습니다.
  • jq CLI 툴을 설치했습니다.
  • 클러스터가 AWS에 설치되어 있으며 AWS STS(보안 토큰 서비스)를 사용합니다.
  • 필요한 보안을 저장하도록 AWS Secrets Manager를 구성했습니다.
  • SSCSI Driver Operator가 클러스터에 설치되어 있습니다.
  • Red Hat OpenShift GitOps Operator가 클러스터에 설치되어 있습니다.
  • secrets를 사용할 수 있는 GitOps 리포지토리가 있습니다.
  • Argo CD 관리자 계정을 사용하여 Argo CD 인스턴스에 로그인했습니다.

프로세스

  1. AWS Secrets Manager 공급자를 설치하고 리소스를 추가합니다.

    1. GitOps 리포지토리에서 디렉터리를 생성하고 다음 구성으로 aws-provider.yaml 파일을 추가하여 AWS Secrets Manager 공급자에 대한 리소스를 배포합니다.

      중요

      SSCSI 드라이버의 AWS Secrets Manager 공급자는 업스트림 공급자입니다.

      이 구성은 OpenShift Container Platform과 제대로 작동하도록 업스트림 AWS 설명서에 제공된 구성에서 수정됩니다. 이 구성을 변경하면 기능에 영향을 미칠 수 있습니다.

      aws-provider.yaml 파일의 예

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: csi-secrets-store-provider-aws
        namespace: openshift-cluster-csi-drivers
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: csi-secrets-store-provider-aws-cluster-role
      rules:
      - apiGroups: [""]
        resources: ["serviceaccounts/token"]
        verbs: ["create"]
      - apiGroups: [""]
        resources: ["serviceaccounts"]
        verbs: ["get"]
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get"]
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: csi-secrets-store-provider-aws-cluster-rolebinding
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: csi-secrets-store-provider-aws-cluster-role
      subjects:
      - kind: ServiceAccount
        name: csi-secrets-store-provider-aws
        namespace: openshift-cluster-csi-drivers
      ---
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        namespace: openshift-cluster-csi-drivers
        name: csi-secrets-store-provider-aws
        labels:
          app: csi-secrets-store-provider-aws
      spec:
        updateStrategy:
          type: RollingUpdate
        selector:
          matchLabels:
            app: csi-secrets-store-provider-aws
        template:
          metadata:
            labels:
              app: csi-secrets-store-provider-aws
          spec:
            serviceAccountName: csi-secrets-store-provider-aws
            hostNetwork: false
            containers:
              - name: provider-aws-installer
                image: public.ecr.aws/aws-secrets-manager/secrets-store-csi-driver-provider-aws:1.0.r2-50-g5b4aca1-2023.06.09.21.19
                imagePullPolicy: Always
                args:
                    - --provider-volume=/etc/kubernetes/secrets-store-csi-providers
                resources:
                  requests:
                    cpu: 50m
                    memory: 100Mi
                  limits:
                    cpu: 50m
                    memory: 100Mi
                securityContext:
                  privileged: true
                volumeMounts:
                  - mountPath: "/etc/kubernetes/secrets-store-csi-providers"
                    name: providervol
                  - name: mountpoint-dir
                    mountPath: /var/lib/kubelet/pods
                    mountPropagation: HostToContainer
            tolerations:
            - operator: Exists
            volumes:
              - name: providervol
                hostPath:
                  path: "/etc/kubernetes/secrets-store-csi-providers"
              - name: mountpoint-dir
                hostPath:
                  path: /var/lib/kubelet/pods
                  type: DirectoryOrCreate
            nodeSelector:
              kubernetes.io/os: linux

    2. GitOps 리포지토리에 secret-provider-app.yaml 파일을 추가하여 애플리케이션을 생성하고 AWS Secrets Manager의 리소스를 배포합니다.

      secret-provider-app.yaml 파일 예

      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
        name: secret-provider-app
        namespace: openshift-gitops
      spec:
        destination:
          namespace: openshift-cluster-csi-drivers
          server: https://kubernetes.default.svc
        project: default
        source:
          path: path/to/aws-provider/resources
          repoURL: https://github.com/<my-domain>/<gitops>.git 1
        syncPolicy:
          automated:
          prune: true
          selfHeal: true

      1
      GitOps 리포지토리를 가리키도록 repoURL 필드의 값을 업데이트합니다.
  2. 리소스를 기본 Argo CD 인스턴스와 동기화하여 클러스터에 배포합니다.

    1. openshift-gitops 네임스페이스의 Argo CD 인스턴스에서 관리할 수 있도록 애플리케이션이 배포된 openshift-cluster-csi-drivers 네임스페이스에 레이블을 추가합니다.

      $ oc label namespace openshift-cluster-csi-drivers argocd.argoproj.io/managed-by=openshift-gitops
    2. 방금 내보낸 aws-provider.yaml 파일을 포함하여 GitOps 리포지토리의 리소스를 클러스터에 적용합니다.

      출력 예

      application.argoproj.io/argo-app created
      application.argoproj.io/secret-provider-app created
      ...

Argo CD UI에서 csi-secrets-store-provider-aws 데몬 세트에서 리소스를 계속 동기화하는지 확인할 수 있습니다. 이 문제를 해결하려면 AWS Secrets Manager에서 시크릿을 마운트하도록 SSCSI 드라이버를 구성해야 합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.