añadiendo ejemplo de multus
This commit is contained in:
162
multus/readme.md
Normal file
162
multus/readme.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# CoreDNS con Multus: README de Configuración
|
||||
|
||||
Este documento explica cómo desplegar un pod de CoreDNS en Kubernetes con **Multus CNI** para conectarlo a dos redes físicas (bridges) distintas, asignándole una dirección IP en cada una, y usando `hostNetwork` para exponer el servicio DNS de forma estándar en el host.
|
||||
|
||||
---
|
||||
|
||||
## Objetivo
|
||||
|
||||
* Desplegar CoreDNS con:
|
||||
|
||||
* IP 192.168.1.100/24 en la red **br-admin**
|
||||
* IP 192.168.200.100/22 en la red **br-srv**
|
||||
* Utilizar `hostNetwork: true` para que CoreDNS escuche en el puerto 53 real del host
|
||||
* Añadir un sidecar de herramientas para inspección de red
|
||||
|
||||
---
|
||||
|
||||
## ¿Por qué Multus?
|
||||
|
||||
* Kubernetes estándar solo permite una interfaz por pod (la principal).
|
||||
* Multus permite añadir interfaces **adicionales**, conectando el pod a varias redes físicas (como bridges de Linux).
|
||||
* En este caso, usamos Multus para asignar a CoreDNS dos IPs fijas en dos bridges diferentes, actuando como DNS en ambas redes.
|
||||
|
||||
---
|
||||
|
||||
## Componentes principales
|
||||
|
||||
1. **NetworkAttachmentDefinition** para cada bridge físico:
|
||||
|
||||
* `br-admin` (192.168.1.0/24)
|
||||
* `br-srv` (192.168.200.0/22)
|
||||
2. **ConfigMap** con el `Corefile` (configuración de CoreDNS)
|
||||
3. **Pod** con:
|
||||
|
||||
* `hostNetwork: true`
|
||||
* Anotación Multus para conectar ambas redes
|
||||
* Sidecar de utilidades (`busybox`)
|
||||
|
||||
---
|
||||
|
||||
## Paso a paso
|
||||
|
||||
### 1. NetworkAttachmentDefinition
|
||||
|
||||
Define una NetworkAttachmentDefinition por red, ejemplo:
|
||||
|
||||
`br-admin.yaml`:
|
||||
|
||||
```yaml
|
||||
apiVersion: "k8s.cni.cncf.io/v1"
|
||||
kind: NetworkAttachmentDefinition
|
||||
metadata:
|
||||
name: br-admin
|
||||
namespace: coredns-multus
|
||||
spec:
|
||||
config: '{
|
||||
"cniVersion": "0.3.1",
|
||||
"type": "bridge",
|
||||
"bridge": "br-admin",
|
||||
"ipam": {
|
||||
"type": "static",
|
||||
"addresses": [
|
||||
{
|
||||
"address": "192.168.1.100/24",
|
||||
"gateway": "192.168.1.1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
`br-srv.yaml` igual, cambiando nombre y dirección IP.
|
||||
|
||||
---
|
||||
|
||||
### 2. ConfigMap con Corefile
|
||||
|
||||
Ejemplo:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: coredns-config
|
||||
namespace: coredns-multus
|
||||
data:
|
||||
Corefile: |
|
||||
.:53 {
|
||||
log
|
||||
errors
|
||||
forward . 8.8.8.8
|
||||
cache 30
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Pod con Multus y sidecar de utilidades
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: coredns-multus
|
||||
namespace: coredns-multus
|
||||
annotations:
|
||||
k8s.v1.cni.cncf.io/networks: |
|
||||
[
|
||||
{ "name": "br-admin", "namespace": "coredns-multus" },
|
||||
{ "name": "br-srv", "namespace": "coredns-multus" }
|
||||
]
|
||||
spec:
|
||||
hostNetwork: true
|
||||
containers:
|
||||
- name: coredns
|
||||
image: coredns/coredns:1.11.1
|
||||
volumeMounts:
|
||||
- name: config-volume
|
||||
mountPath: /etc/coredns/Corefile
|
||||
subPath: Corefile
|
||||
ports:
|
||||
- containerPort: 53
|
||||
protocol: UDP
|
||||
- containerPort: 53
|
||||
protocol: TCP
|
||||
- name: tools
|
||||
image: busybox
|
||||
command: [ "sleep", "infinity" ]
|
||||
volumes:
|
||||
- name: config-volume
|
||||
configMap:
|
||||
name: coredns-config
|
||||
tolerations:
|
||||
- operator: "Exists"
|
||||
dnsPolicy: "Default"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Comprobación de las interfaces
|
||||
|
||||
Para ver las interfaces asignadas por Multus:
|
||||
|
||||
```sh
|
||||
kubectl -n coredns-multus exec -it coredns-multus -c tools -- ip a
|
||||
```
|
||||
|
||||
Deberías ver:
|
||||
|
||||
* La interfaz principal (del host, por `hostNetwork`)
|
||||
* Una interfaz extra con IP 192.168.1.100
|
||||
* Otra interfaz extra con IP 192.168.200.100
|
||||
|
||||
---
|
||||
|
||||
## Notas importantes
|
||||
|
||||
* `hostNetwork: true` expone el puerto 53 real en el host.
|
||||
* La IP principal será la del host, las secundarias las de Multus.
|
||||
* Puedes poner el pod en modo Deployment para alta disponibilidad, pero solo una instancia por host con `hostNetwork: true`.
|
||||
* El sidecar puede eliminarse después de la verificación, no es necesario para producción.
|
||||
|
||||
Reference in New Issue
Block a user