Skip to content

Commit 0bd4268

Browse files
authored
Merge pull request #48549 from h3ct0rjs/issue-task-access-api-45316
[es] Added content content/es/docs/tasks/run-application/access-api-from-pod #45316
2 parents b1aea65 + d6e0289 commit 0bd4268

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
---
2+
title: Accediendo a la API de Kubernetes desde un Pod
3+
content_type: task
4+
weight: 120
5+
---
6+
7+
<!-- overview -->
8+
9+
Esta guía muestra como acceder a la API de Kubernetes desde de un Pod.
10+
11+
## {{% heading "prerequisites" %}}
12+
13+
{{< include "task-tutorial-prereqs.md" >}}
14+
15+
<!-- steps -->
16+
17+
## Accediendo a la API desde un Pod
18+
19+
El acceder a la API desde un Pod, la ubicacion y autentication
20+
del servidor de la API es ligeramente diferente que en el caso de un cliente externo.
21+
22+
La forma más fácil de usar la API de Kubernetes desde un Pod es utilizando
23+
una de las bibliotecas de [cliente oficiales](/docs/reference/using-api/client-libraries/). Estas
24+
bibliotecas pueden automáticamente descubrir el servidor de la API y autenticarse.
25+
26+
### Usando Bibliotecas de Cliente Oficiales
27+
28+
Desde un Pod, las formas recomendadas de conectarse a la API de Kubernetes son:
29+
30+
- Para un cliente de Go, utilice la
31+
[biblioteca oficial del cliente de Go](https://github.com/kubernetes/client-go/).
32+
La función `rest.InClusterConfig()` maneja automáticamente el descubrimiento del host de la API
33+
y la autenticación. Vea [un ejemplo aqui](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go).
34+
35+
- Para un cliente de Python, utilice la
36+
[biblioteca oficial del cliente de Python](https://github.com/kubernetes-client/python/).
37+
La función `config.load_incluster_config()` maneja automáticamente el descubrimiento
38+
del host de la API y la autenticación. Vea [un ejemplo aqui](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py).
39+
40+
- Existen varias bibliotecas disponibles, por favor consulte la página de
41+
[Bibliotecas de Clientes](/docs/reference/using-api/client-libraries/).
42+
43+
En cada caso, las credenciales de la cuenta de servicio del Pod se utilizan para
44+
comunicarse de manera segura con el servidor de la API.
45+
46+
### Accediendo directamente a la API REST
47+
48+
Al ejecutarse en un Pod, su contenedor puede crear una URL HTTPS para el servidor de la API de Kubernetes
49+
obteniendo las variables de entorno `KUBERNETES_SERVICE_HOST`y `KUBERNETES_SERVICE_PORT_HTTPS`.
50+
La dirección del servidor de la API dentro del clúster también se publica
51+
en un Servicio llamado `kubernetes` en el namespace `default`, de modo que los pods pueden hacer referencia a
52+
`kubernetes.default.svc` como el nombre DNS para el servidor de la API local.
53+
54+
{{< note >}}
55+
Kubernetes no garantiza que el servidor de API tenga un certificado válido para el
56+
nombre de host `kubernetes.default.svc`;
57+
Sin embargo, se espera que el plano de control presente un certificado válido para
58+
el nombre de host o la dirección IP que representa `$KUBERNETES_SERVICE_HOST`
59+
{{< /note >}}
60+
61+
La forma recomendada para autenticarse con el servidor de la API es con una
62+
credencial de [cuenta de servicio](/docs/tasks/configure-pod-container/configure-service-account/).
63+
Por defecto, un Pod esta asociado con una cuenta de servicio,
64+
esta asociado con una cuenta de servicio, y una credencial (token) para esa cuenta
65+
de servicio se coloca en el sistema de archivos de cada contenedor en ese Pod
66+
en la ruta `/var/run/secrets/kubernetes.io/serviceaccount/token`.
67+
68+
Si está disponible, un paquete de certificados se coloca en el sistema de archivos de
69+
cada contenedor en la ruta `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`, y
70+
debe usarse para verificar el certificado de servicio del servidor API.
71+
72+
Finalmente, el Namespace default puede ser utilizado en las operaciones de API con ámbito de espacio de nombres que se colocan en un archivo
73+
con la ruta `/var/run/secrets/kubernetes.io/serviceaccount/namespace` de cada contenedor
74+
75+
### Usando kubectl proxy
76+
77+
Si deseas consultar la API sin una biblioteca de cliente oficial, puedes ejecutar `kubectl proxy`
78+
como el [comando](/docs/tasks/inject-data-application/define-command-argument-container/)
79+
de un nuevo contenedor sidecar en el Pod. De esta manera, `kubectl proxy` se autenticará
80+
en la API y la expondrá en la interfaz `localhost` del Pod, para que otros contenedores
81+
en el Pod puedan usarla directamente.
82+
83+
### Sin usar un proxy
84+
85+
Es posible evitar el uso del proxy de kubectl pasando el token de autenticación
86+
directamente al servidor de la API. El certificado interno asegura la conexión.
87+
88+
```shell
89+
# Apuntar nombre de host del servidor API interno.
90+
APISERVER=https://kubernetes.default.svc
91+
92+
# Ruta del token de ServiceAccount
93+
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
94+
95+
# Lectura del Namespace del Pod
96+
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
97+
98+
# Lectura del bearer token del ServiceAccount
99+
TOKEN=$(cat ${SERVICEACCOUNT}/token)
100+
101+
# Referencia a la autoridad de certificación interna (CA)
102+
CACERT=${SERVICEACCOUNT}/ca.crt
103+
104+
# Explora la API con TOKEN
105+
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
106+
```
107+
108+
La salida será similar a esto:
109+
110+
```json
111+
{
112+
"kind": "APIVersions",
113+
"versions": ["v1"],
114+
"serverAddressByClientCIDRs": [
115+
{
116+
"clientCIDR": "0.0.0.0/0",
117+
"serverAddress": "10.0.1.149:443"
118+
}
119+
]
120+
}
121+
```

0 commit comments

Comments
 (0)