Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Call the Kubernetes API with client certificates

Última actualización: Sep 04, 2026

La API de Kubernetes es una interfaz HTTP RESTful basada en recursos que admite los métodos GET, POST, PUT, PATCH y DELETE. Utilícela para consultar y gestionar los recursos del clúster mediante programación, sin necesidad de usar kubectl. Puede autenticarse con certificados de cliente e invocar la API mediante cURL para administrar pods y Deployments.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Un clúster de ACK

  • Permiso para acceder a la consola de ACK

  • cURL instalado en su computadora local

Extracción de credenciales desde kubeconfig

  1. Inicie sesión en la consola de ACK.

  2. Haga clic en Go to RAM console para ir a la página de Autorización rápida de Resource Access Management y, a continuación, haga clic en Confirm Authorization Policy. Una vez completada la autorización, actualice la consola de ACK.

  3. En el panel de navegación izquierdo, haga clic en Clusters.

  4. En la página Clusters, haga clic en el nombre del clúster o en Details dentro de la columna Actions.

  5. Haga clic en la pestaña Connection Information. Copie el contenido de kubeconfig y guárdelo localmente como ./kubeconfig.

  6. Extraiga el certificado de cliente, la clave privada y la dirección del servidor de API desde el archivo kubeconfig:

    cat ./kubeconfig | grep client-certificate-data | awk -F ' ' '{print $2}' | base64 -d > ./client-cert.pem
    cat ./kubeconfig | grep client-key-data | awk -F ' ' '{print $2}' | base64 -d > ./client-key.pem
    APISERVER=`cat ./kubeconfig | grep server | awk -F ' ' '{print $2}'`

    Estos comandos decodifican los datos del certificado y almacenan la URL del servidor de API en la variable $APISERVER. Todos los comandos de cURL posteriores utilizan estas credenciales junto con la variable $APISERVER.

La bandera -k omite la verificación TLS del servidor. En entornos de producción, sustituya -k por --cacert <path-to-ca.pem> para verificar la identidad del servidor y evitar ataques de intermediario (man-in-the-middle).

Gestión de pods

Todas las llamadas a la API de pods utilizan la ruta $APISERVER/api/v1/namespaces/<namespace>/pods.

Operación

Método HTTP

Ruta

Listar todos los namespaces

GET

/api/v1/namespaces

Listar todos los pods

GET

/api/v1/namespaces/default/pods

Crear un pod

POST

/api/v1/namespaces/default/pods

Obtener el estado de un pod

GET

/api/v1/namespaces/default/pods/nginx

Obtener registros de un pod

GET

/api/v1/namespaces/default/pods/nginx/log

Obtener métricas de un pod

GET

/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx

Eliminar un pod

DELETE

/api/v1/namespaces/default/pods/nginx

Listar todos los namespaces del clúster:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces

Listar todos los pods en el namespace predeterminado:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods

Crear un pod a partir de un manifiesto JSON:

cat nginx-pod.json
{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "nginx",
        "namespace": "default"
    },
    "spec": {
        "containers": [
            {
                "name": "nginx",
                "image": "nginx:alpine",
                "ports": [
                    {
                        "containerPort": 80
                    }
                ]
            }
        ]
    }
}

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods \
  -X POST --header 'content-type: application/json' -d@nginx-pod.json

Crear un pod a partir de un manifiesto YAML:

cat nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: default
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    ports:
    - containerPort: 80

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods \
  -X POST --header 'content-type: application/yaml' --data-binary @nginx-pod.yaml

Obtener el estado de un pod:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx

Obtener los registros de un pod:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log

Obtener métricas del pod mediante la API de Metrics Server:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx

Eliminar un pod:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE

Gestión de Deployments

Todas las llamadas a la API de Deployments utilizan la ruta $APISERVER/apis/apps/v1/namespaces/<namespace>/deployments.

Crear un Deployment:

cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "2"
            memory: "4Gi"

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments \
  -X POST --header 'content-type: application/yaml' --data-binary @nginx-deploy.yaml

Listar todos los Deployments en el namespace predeterminado:

curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments

Escalar un Deployment:

curl --cert ./client-cert.pem --key ./client-key.pem -k \
  $APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy \
  -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' \
  -d '{"spec": {"replicas": 4}}'

Actualizar la imagen del contenedor:

curl --cert ./client-cert.pem --key ./client-key.pem -k \
  $APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy \
  -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' \
  -d '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image": "nginx:1.7.9"}]}}}}'

Siguientes pasos

Para acceder mediante programación más allá de cURL, utilice una biblioteca de cliente oficial de Kubernetes:

Lenguaje

Biblioteca de cliente

Ejemplos

Go

client-go

Explorar

Python

client-python

Explorar

Java

client-java

Explorar

Consulte Bibliotecas de cliente de Kubernetes para obtener la lista completa de lenguajes compatibles.

Explore otros métodos de acceso en Acceso a clústeres mediante la API de Kubernetes.