Ringkasan API Google Distributed Cloud dengan air gap

Application programming interface (API) Google Distributed Cloud (GDC) dengan air gap adalah antarmuka terprogram untuk layanan platform GDC. Google membangun API bidang kontrol di atas Kubernetes, menggunakan Model Resource Kubernetes (KRM). Bidang kontrol melakukan pengelolaan resource untuk layanan seperti pembuatan, penghapusan, dan update.

Layanan tertentu memiliki API ini dan API bidang datanya sendiri, yang berbasis XML, JSON, atau gRPC. Halaman ini membahas layanan tersebut di bagiannya masing-masing.

Tentang GDC API

Ada dua jenis API GDC: yang berbasis Kubernetes dan yang tidak. Banyak API GDC merupakan ekstensi untuk Kubernetes API open source. Alat ini menggunakan resource kustom Kubernetes dan mengandalkan KRM. API ini, seperti Kubernetes API, adalah RESTful API berbasis HTTP, yang menerima dan menampilkan JSON sebagai default, atau dalam Protobuf. Endpoint API adalah server Kubernetes yang relevan.

API GDC lainnya yang tidak berbasis Kubernetes, seperti API AI terlatih Vertex, memiliki endpoint-nya sendiri. Selain mendukung HTTP, beberapa API ini juga dapat diakses oleh gRPC, framework remote procedure call open source. Untuk mengetahui informasi selengkapnya tentang API tertentu, lihat dokumentasi khususnya di menu navigasi vertikal.

Untuk mengakses GDC API, gunakan alat gdcloud CLI atau konsol GDC.

Tentang Kubernetes API dan KRM

Karena banyak GDC API merupakan ekstensi untuk Kubernetes API dan mengandalkan KRM, pemahaman tentang konsep ini akan membantu Anda memanfaatkan GDC API sepenuhnya.

Kubernetes API sepenuhnya bersifat deklaratif, dan semua yang ada di Kubernetes API adalah resource yang mengikuti KRM. Klien API, baik manusia maupun mesin, bertindak atas resource tersebut, sering kali dengan operasi buat, baca, update, dan hapus (CRUD). Database Kubernetes menyimpan resource dan mewakili status sistem. Kubernetes terus memantau resource tersebut dan merekonsiliasi status sistem yang sebenarnya dengan status yang diinginkan. Misalnya, jika Anda mengupdate resource Deployment untuk menunjukkan bahwa Anda menginginkan lima replika container, bukan empat, Kubernetes akan mendeteksi perubahan jumlah replika yang diinginkan dan membuat container tambahan.

Untuk Kubernetes API inti, Kubernetes melakukan rekonsiliasi antara status yang diinginkan dan status sebenarnya. Ekstensi Kubernetes API adalah resource kustom yang bukan bagian dari Kubernetes API inti. Software kustom terus memantau dan berinteraksi dengan Kubernetes API serta melakukan rekonsiliasi.

Untuk mempelajari lebih lanjut Kubernetes API dan model resource Kubernetes, baca dokumentasi resmi Kubernetes.

API global dan zona

Resource di GDC dengan air gap adalah resource zona atau resource global. Resource zona beroperasi dalam satu zona secara independen, dan pemadaman zona dapat memengaruhi sebagian atau semua resource di zona tersebut. Resource global beroperasi dengan redundansi di beberapa zona untuk fault tolerance.

GDC dengan air gap menawarkan dua tingkat API bidang pengelolaan untuk membuat dan mengelola kedua jenis resource GDC: API global dan API zona.

API global dan zonal adalah API deklaratif Kubernetes yang disajikan di endpoint yang berbeda, dan resource GDC direpresentasikan sebagai resource kustom Kubernetes di server API. Server API global berbagi satu cluster etcd yang didistribusikan di seluruh zona untuk memberikan konsistensi yang kuat dengan fault tolerance, dengan konsekuensi latensi yang lebih tinggi dan kueri tulis per detik (QPS) yang lebih rendah dibandingkan dengan server API zona. Di setiap organisasi, server API pengelolaan zona menyediakan API zona bagi administrator dan developer untuk mengelola resource zona, dan server API global menyediakan API global untuk mengelola resource multi-zona.

Akses API GDC

Alat gdcloud CLI dan konsol GDC memanfaatkan API GDC. Google merekomendasikan agar Anda menggunakannya untuk menjelajahi GDC atau melakukan operasi satu kali. Namun, jika Anda menggunakan akses otomatis atau terprogram ke GDC, Google merekomendasikan agar Anda menggunakan API GDC secara langsung.

Dukungan HTTP dan gRPC

Sebagian besar GDC API menyediakan antarmuka JSON HTTP yang dapat Anda panggil secara langsung. API berbasis Kubernetes menggunakan library klien Kubernetes. Beberapa API GDC non-Kubernetes memiliki antarmuka gRPC, yang memberikan peningkatan performa dan kegunaan. Google juga menyediakan library klien untuk API GDC yang tidak berbasis Kubernetes. Untuk membaca lebih lanjut tentang gRPC, buka https://grpc.io/.

Enkripsi TLS

Semua GDC API menerima permintaan menggunakan enkripsi Transport Layer Security (TLS).

  • Jika Anda menggunakan salah satu library klien Kubernetes atau GDC, library tersebut akan menangani enkripsi dalam pengiriman untuk Anda.
  • Jika menggunakan klien HTTP atau gRPC Anda sendiri, Anda harus melakukan autentikasi dengan GDC, yang memerlukan TLS. Untuk gRPC, ikuti petunjuk dalam panduan autentikasi gRPC di https://grpc.io/docs/guides/auth/.

Mengakses Kubernetes API dan API berbasis Kubernetes

kubectl Kubernetes CLI adalah cara utama untuk bekerja langsung dengan Kubernetes API dan API berbasis Kubernetes apa pun.

Akses dengan kubectl

Saat mengakses Kubernetes API untuk pertama kalinya, gunakan alat command line Kubernetes, kubectl.

Untuk mengakses cluster, Anda memerlukan informasi lokasi cluster dan kredensial untuk mengaksesnya. Lihat bagian Login untuk mempelajari cara mendapatkan akses ke kredensial tersebut.

Periksa konfigurasi kubectl Anda saat ini dan lihat cluster yang dapat Anda akses:

kubectl config view

Membuat deskripsi endpoint API

Untuk melihat daftar endpoint API yang tersedia untuk semua API layanan di GDC dengan air gap, Anda dapat membuat deskripsi API mengikuti Spesifikasi OpenAPI dalam format JSON. Anda dapat melihat JSON yang dihasilkan untuk endpoint API di alat seperti Swagger.

Selesaikan langkah-langkah berikut untuk membuat deskripsi endpoint API bidang pengelolaan dan data dalam format JSON:

  1. Buat server proxy antara lingkungan Anda dan server API pengelolaan:

    kubectl proxy --kubeconfig MANAGEMENT_API_SERVER
    

    Ganti MANAGEMENT_API_SERVER dengan jalur ke file kubeconfig server API pengelolaan. Untuk mengetahui informasi selengkapnya, lihat Resource server Management API Zona.

  2. Download daftar deskripsi endpoint API dalam format JSON:

    curl -s http://127.0.0.1:8001/openapi/v2 | jq 'if .paths then .paths = (.paths
        | with_entries(select(.key | contains(".private") | not))) else . end' > k8s_swagger.json
    
  3. Buka file k8s_swagger.json yang dihasilkan di alat seperti Swagger untuk melihat deskripsi endpoint API.

Akses langsung ke API dengan klien HTTP

Berikut adalah cara untuk mengakses REST API secara langsung dengan klien HTTP seperti curl, wget, atau browser:

  • Andalkan kubectl untuk menangani autentikasi dengan menggunakannya dalam mode proxy.
  • Menangani autentikasi sendiri.
Menjalankan proxy kubectl

Perintah kubectl proxy menjalankan kubectl dalam mode yang bertindak sebagai reverse proxy. Perintah ini terhubung ke apiserver dan mengelola autentikasi.

Menjalankan kubectl dalam mode proxy akan menggunakan lokasi server API yang disimpan dan memverifikasi identitas server API menggunakan sertifikat. Metode ini melindungi dari serangan man-in-the-middle (MITM).

Contoh berikut menunjukkan cara menggunakan perintah kubectl proxy:

kubectl proxy --port=8080 &

Setelah proxy kubectl berjalan, Anda dapat menjelajahi API dengan curl, wget, atau browser, seperti yang ditunjukkan berikut ini:

$ curl http://localhost:8080/api/
{
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "10.0.1.149:443"
    }
  ]
}
Menjalankan tanpa proxy kubectl

Jika tidak ingin menjalankan kubectl dalam mode proxy, Anda dapat meneruskan token autentikasi langsung ke server API.

  1. Cantumkan semua kemungkinan cluster Kubernetes yang dapat Anda akses, karena file kubeconfig Anda mungkin memiliki beberapa konteks:

    kubectl config view \
        -o jsonpath='{"Cluster name\tServer\n"}{range.clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
    
  2. Ekspor nama cluster Kubernetes yang ingin Anda gunakan dari output sebelumnya:

    export CLUSTER_NAME="CLUSTER_NAME"
    
  3. Tetapkan server API yang merujuk ke nama cluster Kubernetes:

    APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")
    
  4. Buat secret untuk menyimpan token bagi akun layanan default:

    kubectl apply -n NAMESPACE -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: default-token
      annotations:
        kubernetes.io/service-account.name: default
    type: kubernetes.io/service-account-token
    EOF
    
  5. Tunggu hingga pengontrol token mengisi secret dengan token:

    while ! kubectl describe secret default-token -n NAMESPACE | grep -E '^token' >/dev/null; do
      echo "waiting for token..." >&2
      sleep 1
    done
    
  6. Tetapkan nilai token:

    TOKEN=$(kubectl get secret default-token -n NAMESPACE \
        -o jsonpath='{.data.token}' | base64 --decode)
    
  7. Untuk mengakses API, gunakan token dengan alat seperti curl dengan menambahkan header HTTP Authorization: Bearer $TOKEN seperti yang ditunjukkan dalam contoh berikut:

    curl -k $APISERVER/api --header "Authorization: Bearer $TOKEN"
    

    Outputnya mirip dengan hal berikut ini:

    {
      "kind": "APIVersions",
      "versions": [
        "v1"
      ],
      "serverAddressByClientCIDRs": [
        {
          "clientCIDR": "0.0.0.0/0",
          "serverAddress": "10.0.1.149:443"
        }
      ]
    }