Sobes.tech
Middle+

Aké mechanizmy umožňujú prístup k vlastným zdrojom?

sobes.tech AI

Odpoveď od AI

Prístup k vlastným zdrojom (Custom Resources, CR) v Kubernetes sa vykonáva prostredníctvom tých istých mechanizmov ako k vstavaným zdrojom, ale s prihliadnutím na ich špecifiká.

Hlavné mechanizmy:

  1. Kubernetes API Server: Základný spôsob interakcie. API Server poskytuje RESTful API na správu všetkých zdrojov v klastre, vrátane CR.

    • Prostredníctvom API Servera je možné vytvárať, čítať, aktualizovať a odstraňovať CR (CRUD operácie).
    • Prístup k API Serveru je riadený prostredníctvom autentifikácie, autorizácie a kontroly prístupu (Admission Controllers).
  2. kubectl: Nástroj príkazového riadku na interakciu s Kubernetes klastrom.

    • Používa Kubernetes API Server na vykonávanie príkazov.
    • Podporuje operácie s CR podobne ako s bežnými zdrojmi, napríklad:
      # Získať zoznam typov 'myresource'
      kubectl get myresources
      # Opísať konkrétny vlastný zdroj
      kubectl describe myresource my-instance-name
      # Vytvoriť vlastný zdroj zo súboru YAML
      kubectl create -f my-resource.yaml
      
    • Vyžaduje existenciu definície vlastného zdroja (CustomResourceDefinition, CRD) v klastre.
  3. Clients (SDKs): Knihovny na prácu s Kubernetes API v rôznych jazykoch (Go, Python, Java, Ruby a pod.).

    • Umožňujú programovo manipulovať s CR.
    • Často sa používajú controllery (Operators) na správu životného cyklu CR.
    // Príklad v Go s client-go
    config, err := rest.InClusterConfig() // alebo clientcmd.BuildConfigFromFlags
    ak err != nil {
        // ... spracovanie chyby ...
    }
    
    // Vytvorenie dynamického klienta na prácu s akýmikoľvek zdrojmi
    dynamicClient, err := dynamic.NewForConfig(config)
    ak err != nil {
        // ... spracovanie chyby ...
    }
    
    gvr := schema.GroupVersionResource{Group: "stable.example.com", Version: "v1", Resource: "myresources"}
    
    // Získanie zoznamu vlastných zdrojov
    unstructuredList, err := dynamicClient.Resource(gvr).Namespace("default").List(context.TODO(), metav1.ListOptions{})
    ak err != nil {
        // ... spracovanie chyby ...
    }
    
    // Spracovanie zoznamu...
    
  4. Operátori (Operators): Vzor automatizácie využívajúci CR a controllery na správu zložitých aplikácií.

    • Operátori obsahujú logiku na reakciu na zmeny v CR a vykonávanie potrebných akcií (napríklad vytvorenie Pod, Service a pod.).
    • Používajú knižnice klientov (Clients) na interakciu s CR a ďalšími zdrojmi.
  5. RBAC (Role-Based Access Control): Systém na riadenie prístupu v Kubernetes.

    • Prístup k CR je riadený prostredníctvom rolí a väzieb rolí.
    • Je potrebné explicitne udeliť oprávnenia (verbs: get, list, create, update, delete, watch) pre určené skupiny a zdroje (CRD alebo konkrétny CR).
    # Príklad Role, ktorá poskytuje prístup k 'myresources'
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: myresource-reader
      namespace: default
    rules:
    - apiGroups: ["stable.example.com"] # Skupina API vlastného zdroja
      resources: ["myresources"]       # Názov vlastného zdroja v množnom čísle
      verbs: ["get", "list", "watch"]  # Povolené operácie
    

Prístup k vlastným zdrojom nie je odlišný od prístupu k vstavaným zdrojom na úrovni API, ale vyžaduje existenciu príslušného CRD a správne RBAC pravidlá, ktoré výslovne zahŕňajú API skupinu a názov vlastného zdroja.