Skip to content

Commit e260aaa

Browse files
authored
Merge pull request #45096 from Princesso/merged-main-dev-1.30
Merge main branch into dev-1.30
2 parents 54f3782 + c354f44 commit e260aaa

File tree

2 files changed

+669
-0
lines changed

2 files changed

+669
-0
lines changed
Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
---
2+
title: Acessando clusters
3+
weight: 20
4+
content_type: concept
5+
---
6+
7+
<!-- overview -->
8+
9+
Esse tópico fala sobre diversas maneiras de interagir com clusters.
10+
11+
<!-- body -->
12+
13+
## Acessando pela primeira vez com kubectl
14+
15+
Se estiver acessando o Kubernetes API pela primeira vez, recomendamos usar a CLI do Kubernetes, `kubectl`.
16+
17+
Para acessar um cluster, você precisa saber a localização do cluster e ter credenciais para acessá-lo. Geralmente, isso é configurado automaticamente quando você trabalha com um [Guia de instalação](/pt-br/docs/setup/) ou outra pessoa configurou o cluster e forneceu a você credenciais e uma localização.
18+
19+
Verifique o local e as credenciais que o kubectl conhece com esse comando:
20+
21+
```shell
22+
kubectl config view
23+
```
24+
25+
Muitos dos [exemplos](/docs/reference/kubectl/quick-reference/) fornecem uma introdução ao uso do `kubectl` e a documentação completa pode ser encontrada no [guia de referência do kubectl](/docs/reference/kubectl/).
26+
27+
## Acessando diretamente a API REST {#directly-accessing-the-rest-api}
28+
29+
O Kubectl lida com a localização e a autenticação no servidor de API.
30+
Se você quiser acessar diretamente a API REST com um cliente http como
31+
curl ou wget, ou um navegador, há várias maneiras de localizar e autenticar:
32+
33+
- Executar o kubectl no modo proxy.
34+
- Método recomendado.
35+
- Usa a localização previamente armazenada do servidor da API.
36+
- Verifica a identidade do apiserver usando um certificado autoassinado. Não há possibilidade de ataque MITM (_Man-In-The-Middle_).
37+
- Autentica-se no servidor da API.
38+
- No futuro, poderá fazer balanceamento de carga inteligente no lado do cliente, e transferência em caso de falha.
39+
- Forneça o local e as credenciais diretamente para o cliente http.
40+
- Método alternativo.
41+
- Funciona com alguns tipos de código de cliente que são confundidos pelo uso de um proxy.
42+
- É necessário importar um certificado raiz em seu navegador para se proteger contra ataque MITM (_Man-In-The-Middle_).
43+
44+
### Usando o kubectl proxy
45+
46+
O comando a seguir executa o kubectl em um modo em que ele atua como um proxy reverso. Ele lida com
47+
localização do apiserver e da autenticação.
48+
Execute-o desta forma:
49+
50+
```shell
51+
kubectl proxy --port=8080
52+
```
53+
54+
Consulte [kubectl proxy](/docs/reference/generated/kubectl/kubectl-commands/#proxy) para obter mais detalhes.
55+
56+
Em seguida, você pode explorar a API com curl, wget ou um navegador, substituindo localhost
57+
por [::1] para IPv6, da seguinte forma:
58+
59+
```shell
60+
curl http://localhost:8080/api/
61+
```
62+
63+
O resultado é semelhante a este:
64+
65+
```json
66+
{
67+
"kind": "APIVersions",
68+
"versions": [
69+
"v1"
70+
],
71+
"serverAddressByClientCIDRs": [
72+
{
73+
"clientCIDR": "0.0.0.0/0",
74+
"serverAddress": "10.0.1.149:443"
75+
}
76+
]
77+
}
78+
```
79+
80+
### Sem kubectl proxy
81+
82+
Use `kubectl apply` e `kubectl describe secret...` para criar um token para a conta de serviço padrão com grep/cut:
83+
84+
Primeiro, crie o Secret, solicitando um token para a ServiceAccount padrão:
85+
86+
```shell
87+
kubectl apply -f - <<EOF
88+
apiVersion: v1
89+
kind: Secret
90+
metadata:
91+
name: default-token
92+
annotations:
93+
kubernetes.io/service-account.name: default
94+
type: kubernetes.io/service-account-token
95+
EOF
96+
```
97+
98+
Em seguida, aguarde até que o controlador de token preencha o Secret com um token:
99+
100+
```shell
101+
while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
102+
echo "waiting for token..." >&2
103+
sleep 1
104+
done
105+
```
106+
107+
Recupere e use o token gerado:
108+
109+
```shell
110+
APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
111+
TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d " ")
112+
113+
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
114+
```
115+
116+
O resultado é semelhante a este:
117+
118+
```json
119+
{
120+
"kind": "APIVersions",
121+
"versions": [
122+
"v1"
123+
],
124+
"serverAddressByClientCIDRs": [
125+
{
126+
"clientCIDR": "0.0.0.0/0",
127+
"serverAddress": "10.0.1.149:443"
128+
}
129+
]
130+
}
131+
```
132+
133+
Usando `jsonpath`:
134+
135+
```shell
136+
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
137+
TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
138+
139+
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
140+
```
141+
142+
O resultado é semelhante a este:
143+
144+
```json
145+
{
146+
"kind": "APIVersions",
147+
"versions": [
148+
"v1"
149+
],
150+
"serverAddressByClientCIDRs": [
151+
{
152+
"clientCIDR": "0.0.0.0/0",
153+
"serverAddress": "10.0.1.149:443"
154+
}
155+
]
156+
}
157+
```
158+
159+
Os exemplos acima usam a opção `--insecure`. Isso deixa o cluster sujeito a ataques MITM.
160+
Quando o kubectl acessa o cluster, ele usa um certificado raiz guardado
161+
e certificados de cliente para acessar o servidor. (Esses certificados são instalados no diretório
162+
`~/.kube`). Como os certificados do cluster normalmente são autoassinados, pode ser necessária uma
163+
configuração especial para que seu cliente http use o certificado raiz.
164+
165+
Em alguns clusters, o servidor da API não requer autenticação; ele pode servir
166+
no localhost ou estar protegido por um firewall. Não há um padrão
167+
para isso. A página [Controlando Acesso à API do Kubernetes](/pt-br/docs/concepts/security/controlling-access)
168+
descreve como um administrador de cluster pode configurar isso.
169+
170+
## Acesso programático à API
171+
172+
O Kubernetes suporta oficialmente as bibliotecas de clientes [Go](#go-client) e [Python](#python-client).
173+
174+
### Cliente Go{#go-client}
175+
176+
* Para obter a biblioteca, execute o seguinte comando: `go get k8s.io/client-go@kubernetes-<kubernetes-version-number>`,
177+
consulte [INSTALL.md](https://github.com/kubernetes/client-go/blob/master/INSTALL.md#for-the-casual-user)
178+
para obter instruções detalhadas de instalação. Consulte
179+
[https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go#compatibility-matrix)
180+
para ver quais versões são compatíveis.
181+
* Escreva um aplicativo utilizando o cliente Go. Observe que ela define seus próprios objetos de API,
182+
portanto, se necessário, importe as definições de API do cliente Go em vez de importá-las do repositório principal.
183+
Por exemplo, `import "k8s.io/client-go/kubernetes"` está correto.
184+
185+
O cliente Go pode usar o mesmo arquivo [kubeconfig](/pt-br/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
186+
como a CLI do kubectl faz, para localizar e autenticar ao apiserver. Veja esse
187+
[exemplo](https://git.k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go).
188+
189+
Se o aplicativo for disponibilizado como um pod no cluster, consulte a [próxima seção](#acessando-a-api-a-partir-de-um-pod).
190+
191+
### Cliente Python{#python-client}
192+
193+
Para usar o [cliente Python](https://github.com/kubernetes-client/python), execute o seguinte comando:
194+
`pip install kubernetes`. Consulte [a página Python Client Library](https://github.com/kubernetes-client/python)
195+
para obter mais opções de instalação.
196+
197+
O cliente Python pode usar o mesmo arquivo [kubeconfig](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
198+
que a ferramenta kubectl utiliza para localizar e autenticar ao servidor da API. Veja esse
199+
[exemplo](https://github.com/kubernetes-client/python/tree/master/examples).
200+
201+
### Outras bibliotecas
202+
203+
Existem [bibliotecas de clientes](/docs/reference/using-api/client-libraries/) para acessar a API utilizando outras linguagens.
204+
Consulte a documentação de outras bibliotecas para saber como elas se autenticam.
205+
206+
## Acessando a API a partir de um pod
207+
208+
Ao acessar a API a partir de um pod, a localização e a autenticação
209+
para o servidor de API são um pouco diferentes.
210+
211+
Consulte [Acessando a API a partir de um pod](/docs/tasks/run-application/access-api-from-pod/)
212+
para obter mais detalhes.
213+
214+
## Acessando serviços em execução no cluster
215+
216+
A seção anterior descreve como se conectar ao servidor da API do Kubernetes.
217+
Para obter informações sobre como se conectar a outros serviços em execução em um cluster do Kubernetes, consulte
218+
[Acessando serviços em execução em clusters](/pt-br/docs/tasks/access-application-cluster/access-cluster-services/).
219+
220+
## Solicitação de redirecionamentos
221+
222+
Os recursos de redirecionamento foram descontinuados e removidos. Em vez disso, use um proxy (veja abaixo).
223+
224+
## Tantos proxies
225+
226+
Há vários proxies diferentes que você pode encontrar ao usar o Kubernetes:
227+
228+
1. O [kubectl proxy](#directly-accessing-the-rest-api):
229+
230+
- é executado no computador de um usuário ou em um pod
231+
- cria um proxy de um endereço localhost para o servidor da API do Kubernetes
232+
- a conexão do cliente para o proxy usa HTTP
233+
- a conexão do proxy para o servidor da API usa HTTPS
234+
- localiza o apiserver
235+
- adiciona cabeçalhos de autenticação
236+
237+
2. O [proxy do servidor da API](/pt-br/docs/tasks/access-application-cluster/access-cluster-services/#descobrindo-serviços-integrados):
238+
239+
- é um bastião incorporado ao apiserver
240+
- conecta um usuário fora do cluster aos IPs do cluster que, de outra forma, poderiam não ser acessíveis
241+
- é executado no processo do servidor da API
242+
- cliente para proxy usa HTTPS (ou http se o servidor da API estiver configurado dessa forma)
243+
- a conexão do proxy para o destino pode usar HTTP ou HTTPS, conforme escolhido pelo proxy usando as informações disponíveis
244+
- pode ser usado para acessar um Nó, Pod ou Serviço
245+
- faz o balanceamento de carga quando usado para acessar um serviço
246+
247+
3. O [kube proxy](/docs/concepts/services-networking/service/#ips-and-vips):
248+
249+
- é executado em cada nó
250+
- proxy de UDP e TCP
251+
- não entende HTTP
252+
- fornece balanceamento de carga
253+
- é usado apenas para acessar serviços
254+
255+
4. Um Proxy/balanceador de carga na frente do(s) servidor(es) da API:
256+
257+
- a existência e a implementação variam de cluster para cluster (por exemplo, nginx)
258+
- fica entre todos os clientes e um ou mais servidores da API
259+
- atua como um balanceador de carga se houver vários servidores da API.
260+
261+
6. Balanceadores de carga de provedor de nuvem em serviços externos:
262+
263+
- são fornecidos por alguns provedores de nuvem computacional (por exemplo, AWS ELB, Google Cloud Load Balancer)
264+
- são criados automaticamente quando o serviço Kubernetes tem o tipo `LoadBalancer`
265+
- usam somente UDP/TCP
266+
- a implementação varia de acordo com o provedor de nuvem.
267+
268+
Normalmente, os usuários do Kubernetes não precisam se preocupar com nada além dos dois primeiros tipos. O administrador do cluster
269+
normalmente garantirá que os últimos tipos sejam configurados corretamente.

0 commit comments

Comments
 (0)