Skip to content

Commit 8b8650e

Browse files
authored
Merge pull request #27303 from rikatz/extend-net
Add pt translation for extend networking
2 parents 10fa574 + 7f66bfd commit 8b8650e

File tree

2 files changed

+213
-0
lines changed

2 files changed

+213
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: Extensões de Computação, armazenamento e redes
3+
weight: 30
4+
---
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
---
2+
title: Plugins de rede
3+
content_type: concept
4+
weight: 10
5+
---
6+
7+
8+
<!-- overview -->
9+
Plugins de redes no Kubernetes podem ser dos seguintes tipos:
10+
11+
* Plugins CNI: Aderentes à especificação [Container Network Interface](https://github.com/containernetworking/cni) (CNI), desenhados para interoperabilidade.
12+
* Kubernetes usa a versão [v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md) da especificação CNI.
13+
* Plugin kubenet: Implementa o `cbr0` básico usando os plugins CNI `bridge` e `host-local`
14+
15+
<!-- body -->
16+
17+
## Instalação
18+
19+
O kubelet possui um plugin único padrão, e um plugin padrão comum para todo o cluster.
20+
Ele verifica o plugin quando inicia, se lembra o que encontrou, e executa o plugin selecionado
21+
em momentos oportunos dentro do ciclo de vida de um Pod (isso é verdadeiro apenas com o Docker,
22+
uma vez que o CRI gerencia seus próprios plugins de CNI). Existem dois parâmetros de linha de comando
23+
no Kubelet para se ter em mente quando usando plugins:
24+
25+
* `cni-bin-dir`: O Kubelet verifica esse diretório por plugins na inicialização
26+
* `network-plugin`: O plugin de rede que deve ser utilizado do diretório configurado em
27+
`cni-bin-dir`. Deve ser igual ao nome configurado por um plugin no diretório de plugins.
28+
Para plugins de CNI, isso equivale ao valor `cni`.
29+
30+
## Requisitos de plugins de Rede
31+
32+
Além de prover a [interface `NetworkPlugin`](https://github.com/kubernetes/kubernetes/tree/{{< param "fullversion" >}}/pkg/kubelet/dockershim/network/plugins.go)
33+
para configuração da rede do pod, o plugin pode necessitar de suporte específico ao
34+
kube-proxy.
35+
O proxy iptables obviamente depende do iptables, e o plugin deve garantir que o
36+
tráfego do contêiner esteja disponível para o iptables. Por exemplo, se o plugin
37+
conecta os contêineres à _Linux bridge_, o plugin deve configurar a diretiva de
38+
_sysctl_ `net/bridge/bridge-nf-call-iptables` com o valor `1` para garantir que o
39+
proxy iptables opere normalmente. Se o plugin não faz uso da _Linux Bridge_ (mas outro
40+
mecanismo, como Open vSwitch) ele deve garantir que o tráfego do contêiner é roteado
41+
apropriadamente para o proxy.
42+
43+
Por padrão, se nenhum plugin de rede é configurado no kubelet, o plugin `noop` é utilizado,
44+
que configura `net/bridge/bridge-nf-call-iptables=1` para garantir que configurações simples
45+
(como Docker com _bridge Linux_) operem corretamente com o proxy iptables.
46+
47+
### CNI
48+
49+
O plugin de CNI é selecionado utilizando-se da opção `--network-plugin=cni` no início do Kubeket.
50+
O Kubelet lê um arquivo do diretório especificado em `--cni-conf-dir` (padrão `/etc/cni/net.d`)
51+
e usa a configuração de CNI desse arquivo para configurar a rede de cada Pod. O arquivo de
52+
configuração do CNI deve usar a [especificação de CNI](https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration),
53+
e qualquer plugin referenciado nesse arquivo deve estar presente no diretório
54+
`--cni-bin-dir` (padrão `/opt/cni/bin`).
55+
56+
Se existirem múltiplos arquivos de configuração no diretório, o kubelet usa o arquivo de
57+
configuração que vier primeiro pelo nome, em ordem alfabética.
58+
59+
Adicionalmente ao plugin de CNI especificado no arquivo de configuração, o Kubernetes requer
60+
o plugin CNI padrão [`lo`](https://github.com/containernetworking/plugins/blob/master/plugins/main/loopback/loopback.go) ao menos na versão 0.2.0.
61+
62+
#### Suporte a hostPort
63+
64+
O plugin de redes CNI suporta `hostPort`. Você pode utilizar o plugin oficial
65+
[portmap](https://github.com/containernetworking/plugins/tree/master/plugins/meta/portmap)
66+
ou usar seu próprio plugin com a funcionalidade de _portMapping_.
67+
68+
Caso você deseje habilitar o suporte a `hostPort`, você deve especificar
69+
`portMappings capability` no seu `cni-conf-dir`.
70+
Por exemplo:
71+
72+
```json
73+
{
74+
"name": "k8s-pod-network",
75+
"cniVersion": "0.3.0",
76+
"plugins": [
77+
{
78+
"type": "calico",
79+
"log_level": "info",
80+
"datastore_type": "kubernetes",
81+
"nodename": "127.0.0.1",
82+
"ipam": {
83+
"type": "host-local",
84+
"subnet": "usePodCidr"
85+
},
86+
"policy": {
87+
"type": "k8s"
88+
},
89+
"kubernetes": {
90+
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
91+
}
92+
},
93+
{
94+
"type": "portmap",
95+
"capabilities": {"portMappings": true}
96+
}
97+
]
98+
}
99+
```
100+
101+
#### Suporte a controle de banda
102+
103+
**Funcionalidade experimental**
104+
105+
O plugin de rede CNI também suporta o controle de banda de entrada e saída.
106+
Você pode utilizar o plugin oficial [bandwidth](https://github.com/containernetworking/plugins/tree/master/plugins/meta/bandwidth)
107+
desenvolvido ou usar seu próprio plugin de controle de banda.
108+
109+
Se você habilitar o suporte ao controle de banda, você deve adicionar o plugin `bandwidth`
110+
no seu arquivo de configuração de CNI (padrão `/etc/cni/net.d`) e garantir que o programa
111+
exista no diretório de binários do CNI (padrão `/opt/cni/bin`).
112+
113+
```json
114+
{
115+
"name": "k8s-pod-network",
116+
"cniVersion": "0.3.0",
117+
"plugins": [
118+
{
119+
"type": "calico",
120+
"log_level": "info",
121+
"datastore_type": "kubernetes",
122+
"nodename": "127.0.0.1",
123+
"ipam": {
124+
"type": "host-local",
125+
"subnet": "usePodCidr"
126+
},
127+
"policy": {
128+
"type": "k8s"
129+
},
130+
"kubernetes": {
131+
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
132+
}
133+
},
134+
{
135+
"type": "bandwidth",
136+
"capabilities": {"bandwidth": true}
137+
}
138+
]
139+
}
140+
```
141+
142+
Agora você pode adicionar as anotações `kubernetes.io/ingress-bandwidth` e
143+
`kubernetes.io/egress-bandwidth` em seu pod.
144+
Por exemplo:
145+
146+
```yaml
147+
apiVersion: v1
148+
kind: Pod
149+
metadata:
150+
annotations:
151+
kubernetes.io/ingress-bandwidth: 1M
152+
kubernetes.io/egress-bandwidth: 1M
153+
...
154+
```
155+
156+
### kubenet
157+
158+
Kubenet é um plugin de rede muito simples, existente apenas no Linux. Ele não
159+
implementa funcionalidades mais avançadas, como rede entre nós ou políticas de rede.
160+
Ele é geralmente utilizado junto a um provedor de nuvem que configura as regras de
161+
roteamento para comunicação entre os nós, ou em ambientes com apenas um nó.
162+
163+
O Kubenet cria uma _interface bridge_ no Linux chamada `cbr0` e cria um par _veth_
164+
para cada um dos pods com o host como a outra ponta desse par, conectado à `cbr0`.
165+
Na interface no lado do Pod um endereço IP é alocado de uma faixa associada ao nó,
166+
sendo parte de alguma configuração no nó ou pelo controller-manager. Na interface `cbr0`
167+
é associado o MTU equivalente ao menor MTU de uma interface de rede do host.
168+
169+
Esse plugin possui alguns requisitos:
170+
171+
* Os plugins CNI padrão `bridge`, `lo` e `host-local` são obrigatórios, ao menos na
172+
versão 0.2.0. O Kubenet buscará inicialmente esses plugins no diretório `/opt/cni/bin`.
173+
Especifique a opção `cni-bin-dir` no kubelet para fornecer um diretório adicional
174+
de busca. O primeiro local equivalente será o utilizado.
175+
* O kubelet deve ser executado com a opção `--network-plugin=kubenet` para habilitar esse plugin.
176+
* O Kubelet deve ainda ser executado com a opção `--non-masquerade-cidr=<clusterCidr>` para
177+
garantir que o tráfego de IPs para fora dessa faixa seja mascarado.
178+
* O nó deve possuir uma subrede associada, através da opção `--pod-cidr` configurada
179+
na inicialização do kubelet, ou as opções `--allocate-node-cidrs=true --cluster-cidr=<cidr>`
180+
utilizadas na inicialização do _controller-manager_.
181+
182+
### Customizando o MTU (com kubenet)
183+
184+
O MTU deve sempre ser configurado corretamente para obter-se a melhor performance de
185+
rede. Os plugins de rede geralmente tentam detectar uma configuração correta de MTU,
186+
porém algumas vezes a lógica não irá resultar em uma configuração adequada. Por exemplo,
187+
se a _Docker bridge_ ou alguma outra interface possuir um MTU pequeno, o kubenet irá
188+
selecionar aquela MTU. Ou caso você esteja utilizando encapsulamento IPSEC, o MTU deve
189+
ser reduzido, e esse cálculo não faz parte do escopo da maioria dos plugins de rede.
190+
191+
Sempre que necessário, você pode configurar explicitamente o MTU com a opção `network-plugin-mtu`
192+
no kubelet. Por exemplo, na AWS o MTU da `eth0` geralmente é 9001 então você deve
193+
especificar `--network-plugin-mtu=9001`. Se você estiver usando IPSEC você deve reduzir
194+
o MTU para permitir o encapsulamento excedente; por exemplo: `--network-plugin-mtu=8773`.
195+
196+
Essa opção faz parte do plugin de rede. Atualmente **apenas o kubenet suporta a configuração
197+
`network-plugin-mtu`**.
198+
199+
## Resumo de uso
200+
201+
* `--network-plugin=cni` especifica que devemos usar o plugin de redes `cni` com os
202+
binários do plugin localizados em `--cni-bin-dir` (padrão `/opt/cni/bin`) e as
203+
configurações do plugin localizadas em `--cni-conf-dir` (default `/etc/cni/net.d`).
204+
* `--network-plugin=kubenet` especifica que iremos usar o plugin de rede `kubenet`
205+
com os plugins CNI `bridge`, `lo` e `host-local` localizados em `/opt/cni/bin` ou `cni-bin-dir`.
206+
* `--network-plugin-mtu=9001` especifica o MTU a ser utilizado, atualmente apenas em uso
207+
pelo plugin de rede `kubenet`
208+
209+
## {{% heading "whatsnext" %}}

0 commit comments

Comments
 (0)