Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
inter-cluster.md 4.31 KiB

Ejemplo de network inter:

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: sample-inter-network
spec:
  config: '{
      "cniVersion": "0.3.0",
      "type": "l2sm",
      "device": "l2sm-vNet",
      "kind": {
        "ext-vnet": {
          "provider": {
            "name": "<idco-name>",
            "domain": "<domain-name>"
          },
          "accessList": [ # no tiene porq ser así. Dejar en abierto.
            # {
            #   "user": "<username-1>",
            #   "public-key": "<public-key-1>"
            # },
            # {
            #   "user": "<username-2>",
            #   "public-key": "<public-key-2>"
            # },
            # {
            #   "user": "<username-3>",
            #   "public-key": "<public-key-3>"
            # } 
          ]
        }
      }
    }'

Hay un NED conectado al L2S-M switch del nodo master con 10 interfaces veth (como el NED es hostNetwork, nos podemos permitir crear las interfaces y conectarlas directamente -> Necesario que l2sm-switch se despliegue más tarde).

Se crea esta red en cada clúster usando el L2S-M k8s Client. Es necesario para esto: - Que cada cluster tenga previamente un cluster role para poder dar permisos de crear network attachment definitions.

Se crea un network con el mismo nombre dentro del host. Operador avisa al idco de que se ha conectado a la interfaz, se dice cual es el veth empleado. El idco anota, pero no añade aún.

Se crea una firma (en local, se puede dar un script en conjunto para hacer que esto se haga en una línea de comandos)) en forma secret dentro del cluster con la private key, se pone dentro como anotacion en el pod, en conjunto con el nombre del usuario. el operador puede leerla.

En esta key hay un timestamp, el nombre de la red, identificador del usuario.

apiVersion: v1
kind: Secret
metadata:
  name: sample-one-authorization-key
type: Opaque
data:
  public-key.pem: <firma>

Se attachea al pod, en el campo de spec. Quedaría así:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
  annotations:
    k8s.v1.cni.cncf.io/networks: "sample-inter-network"
spec:
  containers:
  - name: ping
    image: busybox
  volumes:
  - name: authorization-key-volume
    secret:
      secretName: sample-one-authorization-key

Se avisa al operador, y este avisa a ambos controladores, siendo estos los que se encargan de comprobar la firma. -> Y ver si hay autorización

Si no es autorizado, el intent del NED no se crea en el controlador, si es autorizado, se hace intent desde NED, la interfaz veth que corresponda con la que el operador solicita.

Que habría que implementar-> IDCO: Doy por hecho que el idco funciona. Base de datos con: public keys asociados a users. permisos asociados a users. Usar plataforma externa o internamente se define en el controller? Hacer un portal de autorizaciones externo a ONOS?

L2SM-Switch: interfaces veth adicionales que conecten a los NED

NED: como l2sm switch, pero que pueden tener varios controladores. con hostNetwork, van generando interfaces en el host para conecarse con L2S-M switch. un cable por pod o un cable por red?

L2S-M Operator: Cuando encienda que sepa si está en modo inter o no por un argumento. Según lo descrito: evento cuando se crea red inter evento cuando se añade pod

L2S-M Client: A través de este se crean los networks. Con docker por ejemplo? o programa instalado por línea de comandos?

Si alguien quiere unirse a la red, attachea al pod, utilizando

intercluster: owner de la red en cada cluster crea la red con: provider (idco concreto): campo de nombre y campo de dominio nombre accessList (diferente en cada cluster): se guarda clave pública de cada usuario. (el usuario tiene su clave privada guardada en su pc por ej) clave: tiene identificador, hash, una firma digital. timestamp

IDCO implementar: 
	cuando hay un request, ver si la clave está bien firmada.
	guardar la de redes:
		RED:
			Cluster1
				AccessList
			Cluster2
				AccessList


1. Se crea red inter
2 se pide al idco que red intra corresponde, (ahi se haria la utorizacion)
3 se guarda el mappeo de red inter a intra, y se juntan esos pares desde el operador
4 cuando alguien despliega, se usa la red intra

de momento security parameters, dejarlo en abierto.
hacer un dibujillo.