|
| 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