Skip to content

Commit

Permalink
Merge pull request kubernetes-sigs#136 from tperez-stratio/0.1-DOCreview
Browse files Browse the repository at this point in the history
[0.17.0-0.1] DOC Restructuration and review
  • Loading branch information
stg-0 authored Jun 6, 2023
2 parents 056862e + 5415121 commit 9c17fb7
Show file tree
Hide file tree
Showing 26 changed files with 1,190 additions and 1,206 deletions.
7 changes: 3 additions & 4 deletions stratio-docs/es/antora.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
name: cloud-provisioner
title: Stratio KEOS in Clouds
version: '0.1'
#nav:
#- modules/ROOT/nav.adoc
start_page: cloud-provisioner-index-es.adoc

nav:
- modules/ROOT/nav.adoc
start_page: introduction.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,3 @@ compute.zones.list
iam.serviceAccounts.actAs
monitoring.timeSeries.create
resourcemanager.projects.get

5 changes: 5 additions & 0 deletions stratio-docs/es/modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
* xref:ROOT:introduction.adoc[]
* xref:ROOT:architecture.adoc[]
* xref:ROOT:installation.adoc[]
* xref:ROOT:quick-start-guide.adoc[]
* xref:ROOT:operations.adoc[]
99 changes: 99 additions & 0 deletions stratio-docs/es/modules/ROOT/pages/architecture.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
:toc: left
:toclevels: 4
// Images dir path for AsciidocFX:
//:imagesdir: stratio-docs/es/modules/provisioner/assets/images
// Images dir path for GitHub:
:imagesdir: /stratio-docs/es/modules/provisioner/assets/images
// Antora does not require the `imagesdir` directive

= Arquitectura

Arquitectura de referencia

image::eks-reference-architecture.png[]

== Objetos del proveedor de _Cloud_

=== EKS

En un *despliegue por defecto*, se crean los siguientes objetos en AWS (en [silver]#gris# los objetos opcionales que dependerán de lo especificado en el descriptor del _cluster_):

* [silver]#1 VPC.#
* [silver]#6 _subnets_ con sus respectivas tablas de rutas.#
** [silver]#3 _subnets_ públicas (una por AZ).#
** [silver]#3 _subnets_ privadas (también una por AZ).#
* [silver]#1 _NAT gateway_ por cada _subnet_ pública.#
* [silver]#1 _Internet gateway_ para la VPC.#
* [silver]#1 ruta por defecto en la tabla de rutas de cada _subnet_ privada para salir a internet a través de los NAT gateways.#
* [silver]#1 ruta por defecto en la tabla de rutas de cada _subnet_ pública para salir a internet a través del Internet Gateway.#
* 1 política de IAM para los nodos del _cluster_ (_nodes.cluster-api-provider-aws.sigs.k8s.io_)
* 1 rol de IAM para los nodos del _cluster_ (_nodes.cluster-api-provider-aws.sigs.k8s.io_)
* 1 _cluster_ de Elastic Kubernetes Service (EKS) con _add-ons_ para EBS y CNI, _logging_ (si se ha especificado) y un proveedor OIDC.
** 2 _Security Groups_ de EKS para el _control-plane_ y los nodos _Worker_.
** 1 rol de IAM con la política AmazonEKSClusterPolicy.
* VMs para _Workers_ (según descriptor del _cluster_ y autoescalado).
** 1 Volumen EBS por volumen persistente.
* 1 Balanceador de carga tipo _Network_ para la exposición de servicios.
** 1 _Listener_ por puerto para cada _Service_ de tipo balanceador de carga.
* Volumen EBS para cada volumen persistente.

=== GCP

* 1 Balanceador de carga tipo SSL/TCP para el APIserver.
* 1 _Health Check_ para el _Unmanage Instance Group_.
* 1 _CloudNat_ Asociando VPC.
* 1 _Cloud Router_.
* Reglas de _firewall_.
* 1 _Unmanage Instance Group_ para el _control-plane_.
* 1/3 VMs para el _control-plane_ (según descriptor del _cluster_).
** 1 Volumen EBS por VM.
* VMs para _workers_ (según el descriptor del _cluster_ y autoescalado).
** 1 Volumen EBS por VM.
* 1 Balanceador de carga L4 para la exposición de servicios.
** 1 _Listener_ por puerto para cada _Service_ de tipo balanceador de carga.
* Volumen EBS para cada volumen persistente.

== Seguridad

=== Acceso a IMDS en EKS

Dado que los _pods_ ejecutados en un nodo de AWS pueden impersonar al nodo donde se ejecutan simplemente interactuando con IMDS, se utiliza una política de red global (_GlobalNetworkPolicy_ de Calico) para impedir el acceso a todos los _pods_ del _cluster_.

A su vez, se habilita el proveedor OIDC de EKS para permitir el uso de roles de IAM para _Service Accounts_, asegurando el uso de políticas IAM con mínimos privilegios.

=== Acceso al _endpoint_ del APIserver

==== EKS

Durante la creación del _cluster_ de EKS, se crea un _endpoint_ para el APIserver que se utilizará para el acceso al _cluster_ desde el instalador y operaciones del ciclo de vida.

Este _endpoint_ se publica a internet, y su acceso se restringe con una combinación de reglas de AWS Identity and Access Management (IAM) y el Role Based Access Control (RBAC) nativo de Kubernetes.

==== GCP

Para la exposición del APIserver, se crea un balanceador de carga con nombre `<cluster_id>-apiserver` y puerto 443 accesible por red pública (la IP pública asignada es la misma que se configura en el _Kubeconfig_), y un _instance groups_ por AZ (1 o 3, según configuración de HA) con el nodo de _control-plane_ correspondiente.

El _Health Check_ del servicio se hace por SSL, pero se recomienda cambiar a HTTPS con la ruta `/healthz`.

== Almacenamiento

=== Nodos

A nivel de almacenamiento, se monta un único disco _root_ del que se puede definir su tipo, tamaño y encriptación.

Ejemplo:

[source,bash]
----
type: gcp2
size: 384Gi
encrypted: true
----

Estos discos se crean en la provisión inicial de los nodos _workers_, por lo que estos datos se pasan como parámetros del descriptor.

=== _StorageClass_

Por defecto, el _cluster_ disponibiliza una _StorageClass_ ("gp2" en AWS y "csi-gcp-pd" en GCP) para disco de bloques con _filesystem ext4_. Esta _StorageClass_ se crea con _reclaimPolicy: Delete_ y _volumeBindingMode: WaitForFirstConsumer_, esto es, que el disco se creará en el momento en que un _pod_ consuma el _PersistentVolumeClaim_ correspondiente, y se eliminará al borrar el _PersistentVolume_.

Se deberá tener en cuenta que los _PersistentVolumes_ creados a partir de esta _StorageClass_ tendrán afinidad con la zona donde se han consumido.
Loading

0 comments on commit 9c17fb7

Please sign in to comment.