Установка оператора Kerberos в Kubernetes с помощью CLI

Требования

Установка оператора Kerberos

  1. Инициализируйте оператор Kerberos:

    $ ./adc init --kerberos-operator -o kerberos-operator.yaml

    Данная команда создаст файл kerberos-operator.yaml с шаблоном конфигурации.

  2. Отредактируйте конфигурационный файл:

    kerberos-operator.yaml
    apiVersion: adc.arenadata.io/v1alpha1
    kind: KerberosOperator
    metadata:
      name: kerberos (1)
      namespace: kerberos-operator (2)
    spec:
      image: hub.arenadata.io/adc-enterprise/kerberos-operator:<tag> (3)
    
      # Number of replicas
      # replicas: 1
    
      resources:
        limits:
          cpu: 500m
          memory: 256Mi
    
      # Operator ServiceAccount. create: true (default) also creates the manager and per-payload-namespace Role/RoleBinding bound to it; create: false skips all three - name then refers to a ServiceAccount (and RBAC) managed entirely outside the CLI.
      serviceAccount: (4)
        create: true
        name: "kerberos-operator"
    
      # Whether the CLI creates the product namespace.
      # The namespace name is set in metadata.namespace.
      namespace:
        create: true
    
      # Create namespaces to run the payload.
      createPayloadNamespaces: true
    
      # List of namespaces to run the payload in.
      payloadNamespaces: (5)
        - adh
    
      ## Image pull secret for a private registry.
      ## Set 'externalSecretName' to reference an existing Secret,
      ## or set 'credentials' and optionally 'secretName' to let the CLI create one.
      #imagePullSecret:
      #  # Use a Secret managed outside ADC.
      #  externalSecretName: existing-registry-secret
      #
      #  ## Or let ADC create the Secret.
      #  #secretName: custom-registry-secret
      #
      #  #credentials:
      #  #  registry: registry.example.com
      #  #  username: user
      #  #  password: pass
    
      ## Operator monitoring configuration. Supports product-specific metrics export and optional vmagent delivery to an external ADM.
      #monitoring:
      #  # Expose the Kerberos operator metrics endpoint on port 8443.
      #  exportMetrics: true
      #
      #  # Renders a namespace-scoped vmagent that sends metrics to an external ADM.
      #  vmagent:
      #    remoteWrite:
      #      url: http://vminsert.example.com/insert/0/prometheus/api/v1/write
      #    scrapeInterval: 15s
      #    image: hub.arenadata.io/adm-enterprise/vmagent:1.136.0-adm-5.0.0-x86_64
      #
      #    ## HTTPS settings used by vmagent when scraping product metrics.
      #    #tls:
      #    #  ## CA certificate source used to verify the metrics endpoint.
      #    #  #ca:
      #    #  #  # Use a Secret managed outside ADC.
      #    #  #  externalSecretName: existing-product-metrics-ca
      #    #  #
      #    #  #  ## Or let ADC create the Secret.
      #    #  #  #secretName: product-metrics-ca
      #    #  #
      #    #  #  # Key containing the CA certificate in the referenced Secret.
      #    #  #  certificateKey: ca.crt
      #    #  #
      #    #  #  ## Local CA certificate read by ADC to create the configured Secret.
      #    #  #  #files:
      #    #  #  #  certificatePath: /path/to/ca.crt
      #    #
      #    #  ## Server name used to verify the metrics endpoint certificate hostname.
      #    #  #serverName: metrics.example.com
      #    #
      #    #  # Skip verification of the metrics endpoint certificate. Do not use together with ca.
      #    #  insecureSkipVerify: true
    
      ## TLS certificate configuration for metrics endpoint.
      ## Set externalSecretName to reference an existing Secret,
      ## or set files and optional secretName to have ADC create it.
      #metricsTLS:
      #  ## Optional name of the Secret ADC creates from local files.
      #  #secretName: custom-metrics-tls-secret
      #  externalSecretName: existing-metrics-tls-secret
      #
      #  # Key in the Secret containing the TLS certificate.
      #  certificateKey: tls.crt
      #
      #  # Key in the Secret containing the TLS private key.
      #  privateKey: tls.key
      #
      #  ## Local files 'adc apply' puts into the Secret named by metricsTLS.secretName.
      #  ## Relative paths are resolved against the config file.
      #  #files:
      #  #  certificatePath: /path/to/tls.crt
      #  #  privateKeyPath: /path/to/tls.key
    
      ## Defines the Kerberos realm configuration and krb5.conf-related settings.
      kdc: (6)
        realm: AD.RANGER-TEST
        labelSelector:
          env: prod
        realms:
          AD.RANGER-TEST: |-
            kdc = ad01.adsw.io
            admin_server = ad01.adsw.io
        domainRealm:
          ad.ranger-test: AD.RANGER-TEST
        libdefaults:
      #    debug: "false"
          default_realm: AD.RANGER-TEST
      #    default_tgs_enctypes: aes256-cts-hmac-sha1-96
      #    dns_lookup_kdc: "false"
    
      ## Defines connection and authentication details for the LDAP server (backend for Kerberos KDC).
      ldapSecret: (7)
        secretName: ldap-credentials
        provider: ad
        address: ldaps://ad01.adsw.io:636
        adminUser: stikhomirov@AD.RANGER-TEST
        adminPassword: <password>
        baseDN: cn=users,dc=example,dc=com
      #  ca: ""
      #
      #  # Local file paths consumed by the CLI during 'adc apply'.
      #  # Paths are relative to the config file. The CLI reads this file
      #  # and creates the Secret named by ldapSecret.secretName.
        files:
          certificatePath: /etc/ssl/ldap-ca.pem (8)
    1 Наименование релиза оператора Kerberos.
    2 Настройки пространства имен.
    3 URL образа оператора Kerberos в вашем репозитории.
    4 Настройки сервисного аккаунта.
    5 Список пространств имен, доступных оператору Kerberos.
    6 Настройки KDC.
    7 Настройки LDAP. Если вы не используете SSL, замените протокол на ldap и порт на 389.
    8 CA-сертификат в формате PEM, необходимый, если LDAP защищен SSL.
  3. Вы можете проверить конфигурацию перед ее применением, выполнив команду apply с флагом --dry-run:

    $ ./adc apply -f kerberos-operator.yaml --dry-run > kerberos-operator-render.yaml
    kerberos-operator-render.yaml
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: kerberos-operator
    spec: {}
    status: {}
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: adh
    spec: {}
    status: {}
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kerberos-operator
      namespace: kerberos-operator
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: kerberos-operator-manager
      namespace: kerberos-operator
    rules:
    - apiGroups:
      - events.k8s.io
      resources:
      - events
      verbs:
      - create
      - patch
    - apiGroups:
      - coordination.k8s.io
      resources:
      - leases
      verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
    - apiGroups:
      - ""
      resources:
      - secrets
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - krb5.arenadata.io
      resources:
      - kdcconfigs
      verbs:
      - get
      - list
      - patch
      - update
      - watch
    - apiGroups:
      - krb5.arenadata.io
      resources:
      - kdcconfigs/status
      verbs:
      - get
      - patch
      - update
    - apiGroups:
      - krb5.arenadata.io
      resources:
      - kdcconfigs/finalizers
      verbs:
      - update
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: kerberos-operator-manager
      namespace: kerberos-operator
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: kerberos-operator-manager
    subjects:
    - kind: ServiceAccount
      name: kerberos-operator
      namespace: kerberos-operator
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: kerberos-operator-payload
      namespace: adh
    rules:
    - apiGroups:
      - events.k8s.io
      resources:
      - events
      verbs:
      - create
      - patch
    - apiGroups:
      - ""
      resources:
      - secrets
      verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
    - apiGroups:
      - krb5.arenadata.io
      resources:
      - keytabs
      verbs:
      - get
      - list
      - patch
      - update
      - watch
    - apiGroups:
      - krb5.arenadata.io
      resources:
      - keytabs/status
      verbs:
      - get
      - patch
      - update
    - apiGroups:
      - krb5.arenadata.io
      resources:
      - keytabs/finalizers
      verbs:
      - update
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: kerberos-operator-payload
      namespace: adh
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: kerberos-operator-payload
    subjects:
    - kind: ServiceAccount
      name: kerberos-operator
      namespace: kerberos-operator
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app.kubernetes.io/component: operator
        app.kubernetes.io/managed-by: adc-cli
        arenadata.io/operator-type: kerberos
      name: kerberos-operator
      namespace: kerberos-operator
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/component: operator
          app.kubernetes.io/managed-by: adc-cli
          app.kubernetes.io/name: kerberos-operator
      strategy: {}
      template:
        metadata:
          labels:
            app.kubernetes.io/component: operator
            app.kubernetes.io/managed-by: adc-cli
            app.kubernetes.io/name: kerberos-operator
        spec:
          containers:
          - args:
            - -ns=adh
            image: hub.arenadata.io/adc-enterprise/kerberos-operator:<tag>
            imagePullPolicy: Always
            livenessProbe:
              httpGet:
                path: /healthz
                port: 8081
              initialDelaySeconds: 5
              periodSeconds: 10
            name: app
            readinessProbe:
              httpGet:
                path: /readyz
                port: 8081
              initialDelaySeconds: 5
              periodSeconds: 10
            resources:
              limits:
                cpu: 500m
                memory: 256Mi
              requests:
                cpu: 500m
                memory: 256Mi
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                - ALL
              readOnlyRootFilesystem: true
              runAsGroup: 10001
              runAsNonRoot: true
              runAsUser: 10001
          securityContext:
            fsGroup: 10001
            runAsGroup: 10001
            runAsNonRoot: true
            runAsUser: 10001
          serviceAccountName: kerberos-operator
          terminationGracePeriodSeconds: 10
    status: {}
    ---
    apiVersion: krb5.arenadata.io/v1alpha1
    kind: KDCConfig
    metadata:
      name: kerberos-kdc
      namespace: kerberos-operator
    spec:
      domainRealm:
        ad.ranger-test: AD.RANGER-TEST
      labelSelector:
        env: prod
      libdefaults:
        default_realm: AD.RANGER-TEST
      realm: AD.RANGER-TEST
      realms:
        AD.RANGER-TEST: |-
          kdc = ad01.adsw.io
          admin_server = ad01.adsw.io
    ---
    apiVersion: v1
    data:
      ca: <encoded-ca>
    kind: Secret
    metadata:
      annotations:
        krb5.arenadata.io/provider: ad
      labels:
        env: prod
      name: ldap-credentials
      namespace: kerberos-operator
    stringData:
      addr: ldaps://ad01.adsw.io:636
      adminDN: stikhomirov@AD.RANGER-TEST
      adminPW: <password>
      baseDN: cn=users,dc=example,dc=com
    type: krb5.arenadata.io/ldap-credentials
  4. Примените конфигурацию и разверните оператор Kerberos:

    $ ./adc apply -f kerberos-operator.yaml

    Ожидаемый вывод содержит сообщение с подтверждением успеха:

    time="20260923082509UTC" level="info" msg="operator kerberos/kerberos applied to namespace kerberos-operator"
  5. Проверьте работоспособность пода оператора Kerberos:

    $ kubectl get pods -n kerberos-operator

    Ожидаемый вывод должен быть похож на следующий:

    NAME                                 READY   STATUS    RESTARTS   AGE
    kerberos-operator-5f7fc8945f-gssr6   1/1     Running   0          4m15s

Удаление инстансов

ВАЖНО

Удалять оператор следует только после удаления всех управляемых им ресурсов.

Чтобы удалить оператор Kerberos, выполните команду delete:

$ ./adc delete -f kerberos-operator.yaml

Чтобы удалить оператор Kerberos вместе с его ресурсами, выполните команду delete с флагом --purge:

$ ./adc delete -f kerberos-operator.yaml --purge
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней