📄 Update content content/es/docs/tasks/run-application/access-api-from-pod.md

pull/48549/head
Hector Fabio Jimenez S 2024-10-13 20:00:26 -05:00
parent e2c64d55cd
commit e4988d492b
No known key found for this signature in database
GPG Key ID: 48FE28C197A6E09A
1 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,122 @@
---
title: Accediendo a la API de Kubernetes desde un Pod
content_type: task
weight: 120
---
<!-- overview -->
Esta guía demuestra cómo acceder a la API de Kubernetes desde dentro de un pod.
## {{% heading "prerequisites" %}}
{{< include "task-tutorial-prereqs.md" >}}
<!-- steps -->
## Accediendo a la API desde dentro de un Pod
Al acceder a la API desde dentro de un Pod, localizar y autenticarse
en el servidor de la API es ligeramente diferente al caso de un cliente externo.
La forma más fácil de usar la API de Kubernetes desde un Pod es utilizar
una de las bibliotecas de [cliente oficiales](/docs/reference/using-api/client-libraries/). Estas
bibliotecas pueden descubrir automáticamente el servidor de la API y autenticarse.
### Usando Bibliotecas de Cliente Oficiales
Desde dentro de un POD, las formas recomendadas de conectarse a la API de Kubernetes son:
- Para un cliente de Go, utiliza la
[biblioteca oficial de cliente Go](https://github.com/kubernetes/client-go/).
La función `rest.InClusterConfig()` maneja automáticamente el descubrimiento del host de la API
y la autenticación. Ver [un ejemplo aqui](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go).
- Para un cliente de Python, utiliza la
[biblioteca oficial de cliente Python](https://github.com/kubernetes-client/python/).
La función `config.load_incluster_config()` maneja automáticamente el descubrimiento
del host de la API y la autenticación. Ver [un ejemplo aqui](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py).
- Existen varias bibliotecas disponibles, por favor consulta la pagina de
[Bibliotecas de Cliente](/docs/reference/using-api/client-libraries/).
En cada caso, las credenciales de la cuenta de servicio del Pod se utilizan para
comunicarse de manera segura con el servidor de la API.
### Accediendo directamente a la API REST
Al ejecutarse en un Pod, tu contenedor puede crear una URL HTTPS para el servidor
de la API de Kubernetes obteniendo las variables de entorno `KUBERNETES_SERVICE_HOST`
and `KUBERNETES_SERVICE_PORT_HTTPS`. La dirección del servidor de la API dentro del
clúster también se publica en un Servicio llamado `kubernetes` en el espacio de nombres
`default`, de modo que los pods pueden hacer referencia a `kubernetes.default.svc`como
el nombre DNS para el servidor de la API local.
{{< note >}}
Kubernetes does not guarantee that the API server has a valid certificate for
the hostname `kubernetes.default.svc`;
however, the control plane **is** expected to present a valid certificate for the
hostname or IP address that `$KUBERNETES_SERVICE_HOST` represents.
{{< /note >}}
The recommended way to authenticate to the API server is with a
[service account](/docs/tasks/configure-pod-container/configure-service-account/)
credential. By default, a Pod
is associated with a service account, and a credential (token) for that
service account is placed into the filesystem tree of each container in that Pod,
at `/var/run/secrets/kubernetes.io/serviceaccount/token`.
If available, a certificate bundle is placed into the filesystem tree of each
container at `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`, and should be
used to verify the serving certificate of the API server.
Finally, the default namespace to be used for namespaced API operations is placed in a file
at `/var/run/secrets/kubernetes.io/serviceaccount/namespace` in each container.
### Using kubectl proxy
Si deseas consultar la API sin una biblioteca de cliente oficial, puedes ejecutar `kubectl proxy`
como el [comando](/docs/tasks/inject-data-application/define-command-argument-container/)
de un nuevo contenedor sidecar en el Pod. De esta manera, `kubectl proxy` se autenticará
en la API y la expondrá en la interfaz `localhost` del Pod, para que otros contenedores
en el Pod puedan usarla directamente.
### Sin usar un proxy
Es posible evitar el uso del proxy de kubectl pasando el token de autenticación
directamente al servidor de la API. El certificado interno asegura la conexión.
```shell
# Point to the internal API server hostname
APISERVER=https://kubernetes.default.svc
# Path to ServiceAccount token
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
# Read this Pod's namespace
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
# Read the ServiceAccount bearer token
TOKEN=$(cat ${SERVICEACCOUNT}/token)
# Reference the internal certificate authority (CA)
CACERT=${SERVICEACCOUNT}/ca.crt
# Explore the API with TOKEN
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
```
La salida será similar a esto:
```json
{
"kind": "APIVersions",
"versions": ["v1"],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
```