Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SnowCamp 2022 - InfraAsCode et multicloud à la sauce Kubernetes avec Crossplane

WeScale
February 09, 2022

SnowCamp 2022 - InfraAsCode et multicloud à la sauce Kubernetes avec Crossplane

WeScale

February 09, 2022
Tweet

More Decks by WeScale

Other Decks in Technology

Transcript

  1. Stéphane TEYSSIER Linkedin personnel www.linkedin.com/in/stephaneteyssier InfraAsCode et multicloud à la

    sauce Kubernetes avec Crossplane SnowCamp - 04/02/2021 GitHub de la présentation https://github.com/yesteph/crossplane-demo WeScale Training training.wescale.fr Linkedin WeScale www.linkedin.com/company/wescale
  2. Kubernetes, un standard any cloud oui 88% Utilisez vous Kubernetes

    pour orchestrer vos conteneurs? source: redhat.com service managé hybride
  3. Kubernetes est une boîte à outils • Plugins et exécutables

    • Service catalog • Webhook • Opérateurs
  4. Pour résumer… Kubernetes, disponible partout standardise les pratiques, outils et

    concepts Standard Infra et application Déployer de la même manière son application et les ressources cloud associées pourrait simplifier des choses Extensible Kubernetes est une boîte à outils évolutive
  5. Crossplane “Manage any infrastructure your applications need directly from Kubernetes”

    Licence Apache 2.0 v1.0 dec 2020 CNCF incubation SaaS (upbound.io) ou self-hosted
  6. 01 02 03 05 04 06 Vendredi Mise en production

    multicloud Mardi Gitops Mercredi RTT mais on peut philosopher “Hello World” Lundi Jeudi Abstractions d’infrastructure Conclusion Alors, Crossplane ? La suite de la présentation
  7. apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ...

    crossplane RBAC-manager watch crossplane-system Crossplane “core”
  8. Providers Crossplane • Ensemble de Custom Resource Definitions - CRD

    • Contrôleur pour reconciliation ressources managées / ressource cloud providers officiels
  9. apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ...

    crossplane RBAC-manager watch crossplane-system Provider AWS - installation kubectl apply -f aws-provider.yaml
  10. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch crossplane-provider-aws Type: provider.pkg.crossplane.io crossplane-system Provider AWS - installation
  11. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch crossplane-provider-aws Type: provider.pkg.crossplane.io crossplane-system Provider AWS - configuration aws-creds
  12. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch aws-creds crossplane-provider-aws Type: provider.pkg.crossplane.io default Type: providerconfig.aws.crossplane.io s y n c crossplane-system Provider AWS - configuration
  13. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch aws-creds crossplane-provider-aws Type: provider.pkg.crossplane.io default Type: providerconfig.aws.crossplane.io my-basic-crossplane-vpc Type: vpc.ec2.aws.crossplane.io vpc-097c39d01430 s y n c crossplane-system Une ressource managée
  14. VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1

    pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 apply:start apply:end temps Fini les “drifts” AWS Cloudformation
  15. VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1

    pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 Fini les “drifts”
  16. VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1

    pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 Fini les “drifts”
  17. Fini les “drifts” VPC IGW EIP1 EIP2 priv subnet1 priv

    subnet2 pub subnet1 pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2
  18. Récupération de credentials depuis Vault provider-aws vault-injector 4) retrieve vault

    token for secret request 5) retrieve vault secret 6) format as file in mounted volume 1) deploy pod with service account token 2) authenticate using service account token 3) validate service account token with Kubernetes API Kubernetes Control plane
  19. RBAC kubectl apply -f vpc.yaml cluster-admin cluster-admin rules: - apiGroups:

    - '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*' system:masters
  20. Les compositions Crossplane • Abstractions sur des ressources managées •

    Une interface mais plusieurs implémentations • Séparation infra builder/app operator • Différents provisionning • NoCode
  21. network Composition CompositeResource Definition interface Composition classe Claims instance vpc

    igw subnet subnet subnet subnet route table kind: Network metadata: name: demo-aws-network namespace: my-app spec: ... publish infra builder cluster scope app operator/dev namespace scope
  22. CompositeResource Definition Composition Claims network vpc VPC kind: Network metadata:

    name: demo-aws-network namespace: ns1 spec: ... cluster eks.wescale services.wescale eks.wescale cluster.eks iam services.wescale helm/prometheus kind: Cluster metadata: name: demo-aws-cluster namespace: ns1 spec: ... Un exemple plus poussé - “cluster”
  23. network cluster eks.wescale services.wescale gke.wescale services.wescale eks.wescale cluster.eks iam VPC

    VPC Subnetwork Subnetwork gke.wescale gkecluster kind: Network metadata: name: aws-network namespace: ns1 spec: compositionSelector: matchLabels: provider: AWS kind: Network metadata: name: gcp-network namespace: ns2 spec: compositionSelector: matchLabels: provider: GCP Multicloud
  24. SQLInstance Subnetwork Cloud SQL RDS RDS kind: SQLInstance metadata: name:

    aws-primary namespace: ns1 spec: compositionSelector: matchLabels: provider: AWS kind: SQLInstance metadata: name: gcp-secondary namespace: ns1 spec: compositionSelector: matchLabels: provider: GCP Et la data dans tout cela? Failover
  25. Au final • Oui, pour mélanger InfraAsCode et déploiements applicatif

    k8s • Une solution qui se stabilise ◦ Stratégie de providers ◦ Nombre de ressources des providers ◦ De gros changements sur l’année écoulée • Une vraie rupture avec l’InfraAsCode traditionnelle 😄 ◦ Des patterns à construire! ◦ Monitoring de son infraAsCode? ◦ Scalabilité si > 1000 ressources