From 7cceb86b38ba94dab83f6d8f855bbc2c9ea452c7 Mon Sep 17 00:00:00 2001 From: Arie Bregman Date: Sun, 23 Oct 2022 13:02:53 +0300 Subject: [PATCH] Update --- README.md | 320 +------------ images/logos/datadog.png | Bin 0 -> 107543 bytes topics/datadog/README.md | 5 + topics/gcp/README.md | 452 ++++++++++++++++++ topics/gcp/exercises/assign_roles/exercise.md | 13 + topics/gcp/exercises/assign_roles/main.tf | 19 + topics/gcp/exercises/assign_roles/solution.md | 23 + topics/gcp/exercises/assign_roles/vars.tf | 7 + topics/gcp/exercises/assign_roles/versions.tf | 10 + .../gcp/exercises/create_project/exercise.md | 9 + topics/gcp/exercises/create_project/main.tf | 10 + .../gcp/exercises/create_project/solution.md | 19 + .../gcp/exercises/create_project/versions.tf | 10 + topics/gcp/exercises/instance_101/exercise.md | 17 + topics/gcp/exercises/instance_101/main.tf | 21 + topics/gcp/exercises/instance_101/solution.md | 45 ++ topics/gcp/exercises/instance_101/versions.tf | 10 + 17 files changed, 672 insertions(+), 318 deletions(-) create mode 100644 images/logos/datadog.png create mode 100644 topics/datadog/README.md create mode 100644 topics/gcp/README.md create mode 100644 topics/gcp/exercises/assign_roles/exercise.md create mode 100644 topics/gcp/exercises/assign_roles/main.tf create mode 100644 topics/gcp/exercises/assign_roles/solution.md create mode 100644 topics/gcp/exercises/assign_roles/vars.tf create mode 100644 topics/gcp/exercises/assign_roles/versions.tf create mode 100644 topics/gcp/exercises/create_project/exercise.md create mode 100644 topics/gcp/exercises/create_project/main.tf create mode 100644 topics/gcp/exercises/create_project/solution.md create mode 100644 topics/gcp/exercises/create_project/versions.tf create mode 100644 topics/gcp/exercises/instance_101/exercise.md create mode 100644 topics/gcp/exercises/instance_101/main.tf create mode 100644 topics/gcp/exercises/instance_101/solution.md create mode 100644 topics/gcp/exercises/instance_101/versions.tf diff --git a/README.md b/README.md index df2f819..d384c7c 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Cloud
Cloud
aws
AWS
azure
Azure
- Google Cloud Platform
Google Cloud Platform
+ Google Cloud Platform
Google Cloud Platform
openstack
OpenStack
security
Security
@@ -80,7 +80,7 @@ Circle CI
Circle CI
Argo
Argo
Kafka
Kafka
- + DataDog
@@ -1388,322 +1388,6 @@ WHERE When you use a function (`YEAR(purchased_at)`) it has to scan the whole database as opposed to using indexes and basically the column as it is, in its natural state. -## GCP - -
-Explain GCP's architecture
-
- -
-What are the main components and services of GCP?
- -| Components | Services | -| ---------- | ----------------- | -| Compute | Compute Engine | -| | App Engine | -| | Kubernetes Engine | -| | Cloud Function | -| | Cloud Run | -| Storage & | Cloud Storage | -| Database | Cloud SQL | -| | Cloud BigTable | -| | Cloud Spanner | -| | Cloud Datastore | -| Networking | VPC | -| | Load Balancing | -| | Cloud Armor | -| | Cloud CDN | -| | Cloud DNS | -| | Cloud Interconnect| -| Big Data | Big Query | -| | Cloud Dataproc | -| | Cloud Datalab | -| | Data Studio | -| DevOps | Container Registry| -| | Cloud Build | -| | Source Repository | -| Identity & | Cloud Identity | -| Security | Cloud IAM | -| | Cloud KMS | -| Cloud AI | Cloud AutoML | -| | Cloud Vision API | -| | Natural Language | -| | Cloud Speech-to-Text| -| | Cloud Text-to-Speech| -| | Cloud Translation API| -| | Cloud Video Intelligence| -| API Platform | Maps Platform | -| | API Analytics | -| | Apigee Sense | -| | Cloud Endpoints| - -
- -
-What GCP management tools are you familiar with?
-
- -
-Tell me what do you know about GCP networking
- -Virtual Private Cloud(VPC) network is a virtual version of physical network, implemented in Google's internal Network. VPC is a gloabal resource in GCP. -Subnetworks(subnets) are regional resources, ie., subnets can be created withinin regions. - -VPC are created in 2 modes, - -1. Auto mode VPC - One subnet in each region is created automatically by GCP while creating VPC - -2. Custom mode VPC - No subnets are automatically created. This type of network provides complete control over the subnets creation to the users. - - -
- -
-Explain Cloud Functions
- -Google Cloud Functions is a serverless execution environment for building and connecting cloud services. With Cloud Functions you write simple, single-purpose functions that are attached to events emitted from your cloud infrastructure and services. Your function is triggered when an event being watched is fired. - -
- -
-What is Cloud Datastore?
- -Cloud Datastore is a schemaless NoSQL datastore in Google's cloud. Applications can use Datastore to query your data with SQL-like queries that support filtering and sorting. Datastore replicates data across multiple datacenters, which provides a high level of read/write availability. - -
- -
-What network tags are used for?
- -Network tags allow you to apply firewall rules and routes to a specific instance or set of instances: You make a firewall rule applicable to specific instances by using target tags and source tags. - -
- -
-What are flow logs? Where are they enabled?
- -VPC Flow Logs records a sample of network flows sent from and received by VM instances, including instances used as Google Kubernetes Engine nodes. These logs can be used for network monitoring, forensics, real-time security analysis, and expense optimization. - -Enable Flow Logs - -1. Open VPC Network in GCP Console - -2. Click the name of the subnet - -3. Click EDIT button - -4. Set Flow Logs to On - -5. Click Save - - - -
- -
-How do you list buckets?
- Two ways to do that: - - $ gsutil ls - - $ gcloud alpha storage ls - -
- -
-What Compute metadata key allows you to run code at startup?
- -startap-script -
- -
-What the following commands does? `gcloud deployment-manager deployments create`
- -Deployment Manager creates a new deployment. - -
- -
-What is Cloud Code?
-It is a set of tools to help developers write, run and debug GCP kubernetes based applications. It provides built-in support for rapid iteration, debugging and running applications in development and production K8s environments. -
- -### Google Kubernetes Engine (GKE) - -
-What is GKE
- -* It is the managed kubernetes service on GCP for deploying, managing and scaling containerised applications using Google infrastructure. -
- -### Anthos - -
-What is Anthos
-It is a managed application platform for organisations like enterprises that require quick modernisation and certain levels -of consistency for their legacy applications in a hybrid or multicloud world. From this explanation the core ideas can be drawn from these statements; - -* Managed -> the customer does not need to worry about the underlying software intergrations, they just enable the API. -* application platform -> It consists of open source tools like K8s, Knative, Istio and Tekton -* Enterprises -> these are usually organisations with complex needs -* Consistency -> to have the same policies declaratively initiated to be run anywhere securely e.g on-prem, GCP or other-clouds (AWS or Azure) - -fun fact: Anthos is flower in greek, they grow in the ground (earth) but need rain from the clouds to flourish. -
- -
-List the technical components that make up Anthos
- -* Infrastructure management - Google Kubernetes Engine (GKE) -* Cluster management - GKE, Ingress for Anthos -* Service management - Anthos Service Mesh -* Policy enforcement - Anthos Config Management, Anthos Enterprise Data Protection, Policy Controller -* Application deployment - CI/CD tools like Cloud Build, GitLab -* Application development - Cloud Code -
- -
-What is the primary computing environment for Anthos to easily manage workload deployment?
- -* Google Kubernetes Engine (GKE) -
- -
-How does Anthos handle the control plane and node components for GKE?
- -On GCP the kubernetes api-server is the only control plane component exposed to customers whilst compute engine manages -instances in the project. -
- -
-Which load balancing options are available?
- -* Networking load balancing for L4 and HTTP(S) Load Balancing for L7 which are both managed services that do not require - additional configuration. -* Ingress for Anthos which allows the ability to deploy a load balancer that serves an application across multiple clusters - on GKE -
- -
-Can you deploy Anthos on AWS?
- -* Yes, Anthos on AWS is now GA. For more read [here](https://cloud.google.com/anthos/gke/docs/aws) -
- -
-List and explain the enterprise security capabilities provided by Anthos
- -* Control plane security - GCP manages and maintains the K8s control plane out of the box. The user can secure the api-server by using master authorized networks and private clusters. These allow the user to disable access on the public IP address by assigning a private IP address to the master. -* Node security - By default workloads are provisioned on Compute engine instances that use Google's Container Optimised OS. This operating system implements a locked-down firewall, limited user accounts with root disabled and a read-only filesystem. There is a further option to enable GKE Sandbox for stronger isolation in multi-tenant deployment scenarios. -* Network security - Within a created cluster VPC, Anthos GKE leverages a powerful software-defined network that enables simple Pod-to-Pod communications. Network policies allow locking down ingress and egress connections in a given namespace. Filtering can also be implemented to incoming load-balanced traffic for services that require external access, by supplying whitelisted CIDR IP ranges. -* Workload security - Running workloads run with limited privileges, default Docker AppArmor security policies are applied to all Kubernetes Pods. Workload identity for Anthos GKE aligns with the open source kubernetes service accounts with GCP service account permissions. -* Audit logging - Adminstrators are given a way to retain, query, process and alert on events of the deployed environments. -
- -
-How can workloads deployed on Anthos GKE on-prem clusters securely connect to Google Cloud services?
- -* Google Cloud Virtual Private Network (Cloud VPN) - this is for secure networking -* Google Cloud Key Management Service (Cloud KMS) - for key management -
- -
-What is Island Mode configuration with regards to networking in Anthos GKE deployed on-prem?
- -* This is when pods can directly talk to each other within a cluster, but cannot be reached from outside the cluster thus forming an "island" within the network that is not connected to the external network. -
- -
-Explain Anthos Config Management
- -It is a core component of the Anthos stack which provides platform, service and security operators with a single, unified approach to multi-cluster management that spans both on-premises and cloud environments. It closely follows K8s best practices, favoring declarative approaches over imperative operations, and actively monitors cluster state and applies the desired state as defined in Git. It includes three key components as follows: - -1. An importer that reads from a central Git repository -2. A component that synchronises stored configuration data into K8s objects -3. A component that monitors drift between desired and actual cluster configurations with a capability of reconciliation when need rises. -
- -
-How does Anthos Config Management help?
- -It follows common modern software development practices which makes cluster configuration, management and policy changes auditable, revertable, and versionable easily enforcing IT governance and unifying resource management in an organisation. -
- -
-What is Anthos Service Mesh?
- -* It is a suite of tools that assist in monitoring and managing deployed services on Anthos of all shapes and sizes whether running in cloud, hybrid or multi-cloud environments. It leverages the APIs and core components from Istio, a highly configurable and open-source service mesh platform. -
- -
-Describe the two main components of Anthos Service Mesh
- -1. Data plane - it consists of a set of distributed proxies that mediate all inbound and outbound network traffic between individual services which are configured using a centralised control plane and an open API -2. Control plane - is a fully managed offering outside of Anthos GKE clusters to simplify management overhead and ensure highest possible availability. -
- -
-What are the components of the managed control plane of Anthos Service Mesh?
- -1. Traffic Director - it is GCP's fully managed service mesh traffic control plane, responsible for translating Istio API objects into configuration information for the distributed proxies, as well as directing service mesh ingress and egress traffic -2. Managed CA - is a centralised certificate authority responsible for providing SSL certificates to each of the distributed proxies, authentication information and distributing secrets -3. Operations tooling - formerly stackdriver, provides a managed ingestion point for observability and telemetry, specifically monitoring, tracing and logging data generated by each of the proxies. This powers the observability dashboard for operators to visually inspect their services and service dependencies assisting in the implementation of SRE best practices for monitoring SLIs and establishing SLOs. -
- -
-How does Anthos Service Mesh help?
-Tool and technology integration that makes up Anthos service mesh delivers signficant operational benefits to Anthos environments, with minimal additional overhead such as follows: - -* Uniform observability - the data plane reports service to service communication back to the control plane generating a service dependency graph. Traffic inspection by the proxy inserts headers to facilitate distributed tracing, capturing and reporting service logs together with service-level metrics (i.e latency, errors, availability). -* Operational agility - fine-grained controls for managing the flow of inter-mesh (north-south) and intra-mesh (east-west) traffic are provided. -* Policy-driven security - policies can be enforced consistently across diverse protocols and runtimes as service communications are secured by default. -
- -
-List possible use cases of traffic controls that can be implemented within Anthos Service Mesh
- -* Traffic splitting across differing service versions for canary or A/B testing -* Circuit breaking to prevent cascading failures -* Fault injection to help build resilient and fault-tolerant deployments -* HTTP header-based traffic steering between individual services or versions -
- -
-What is Cloud Run for Anthos?
- -It is part of the Anthos stack that brings a serverless container experience to Anthos, offering a high-level platform experience on top of K8s clusters. It is built with Knative, an open-source operator for K8s that brings serverless application serving and eventing capabilities. -
- -
-How does Cloud Run for Anthos simplify operations?
- -Platform teams in organisations that wish to offer developers additional tools to test, deploy and run applications can use Knative to enhance this experience on Anthos as Cloud Run. Below are some of the benefits; - -* Easy migration from K8s deployments - Without Cloud Run, platform engineers have to configure deployment, service, and HorizontalPodAutoscalers(HPA) objects to a loadbalancer and autoscaling. If application is already serving traffic it becomes hard to change configurations or roll back efficiently. Using Cloud Run all this is managed thus the Knative service manifest describes the application to be autoscaled and loadbalanced -* Autoscaling - a sudden traffic spike may cause application containers in K8s to crash due to overload thus an efficient automated autoscaling is executed to serve the high volume of traffic -* Networking - it has built-in load balancing capabilities and policies for traffic splitting between multiple versions of an application. -* Releases and rollouts - supports the notion of the Knatibe API's revisions which describe new versions or different configurations of your application and canary deployments by splitting traffic. -* Monitoring - observing and recording metrics such as latency, error rate and requests per second. -
- -
-List and explain three high-level out of the box autoscaling primitives offered by Cloud Run for Anthos that do not exist in K8s natively
- -* Rapid, request-based autoscaling - default autoscalers monitor request metrics which allows Cloud Run for Anthos to handle spiky traffic patterns smoothly -* Concurrency controls - limits such as max in-flight requests per container are enforced to ensure the container does not become overloaded and crash. More containers are added to handle the spiky traffic, buffering the requests. -* Scale to zero - if an application is inactive for a while Cloud Run scales it down to zero to reduce its footprint. Alternatively one can turn off scale-to-zero to prevent cold starts. -
- -
-List some Cloud Run for Anthos use cases
- -As it does not support stateful applications or sticky sessions, it is suitable for running stateless applications such as: - -* Machine learning model predictions e.g Tensorflow serving containers -* API gateways, API middleware, web front ends and Microservices -* Event handlers, ETL -
- ## OpenStack
diff --git a/images/logos/datadog.png b/images/logos/datadog.png new file mode 100644 index 0000000000000000000000000000000000000000..d1565c8253e029b039a47548e13e07e837c904b1 GIT binary patch literal 107543 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 literal 0 HcmV?d00001 diff --git a/topics/datadog/README.md b/topics/datadog/README.md new file mode 100644 index 0000000..4319ed3 --- /dev/null +++ b/topics/datadog/README.md @@ -0,0 +1,5 @@ +# DataDog + +## Questions + +TODO \ No newline at end of file diff --git a/topics/gcp/README.md b/topics/gcp/README.md new file mode 100644 index 0000000..36c7764 --- /dev/null +++ b/topics/gcp/README.md @@ -0,0 +1,452 @@ +# Google Cloud Platform + +- [Google Cloud Platform](#google-cloud-platform) + - [Exercises](#exercises) + - [Account Setup](#account-setup) + - [Compute Engine](#compute-engine) + - [Questions](#questions) + - [Global Infrastructure](#global-infrastructure) + - [gcloud](#gcloud) + - [Resource Hierarchy](#resource-hierarchy) + - [IAM and Roles](#iam-and-roles) + - [Labels and Tags](#labels-and-tags) + - [gcloud](#gcloud-1) + - [Compute Engine](#compute-engine-1) + - [gcloud](#gcloud-2) + - [Other](#other) + - [Google Kubernetes Engine (GKE)](#google-kubernetes-engine-gke) + - [Anthos](#anthos) + +## Exercises + +### Account Setup + +|Name|Topic|Objective & Instructions|Solution|Comments| +|--------|--------|------|----|----| +| Create a project | Organization | [Exercise](exercises/create_project/exercise.md) | [Solution](exercises/create_project/solution.md) | | +| Assign roles | IAM | [Exercise](exercises/assign_roles/exercise.md) | [Solution](exercises/assign_roles/solution.md) | | + + +### Compute Engine + +|Name|Topic|Objective & Instructions|Solution|Comments| +|--------|--------|------|----|----| +| Create an instance | Compute, Labels | [Exercise](exercises/instance_101/exercise.md) | [Solution](exercises/instance_101/solution.md) | | + + +## Questions + +### Global Infrastructure + +
    +Explain each of the following + + * Zone + * Region +
    + +GCP regions are data centers hosted across different geographical locations worldwide.
    + +Within each region, there are multiple isolated locations known as Zones. Each zone is one or more data-centers with redundant network and connectivity and power supply. Multiple zones ensure high availability in case one of them goes down + +
    + +
    +True or False? Each GCP region is designed to be completely isolated from the other GCP regions
    + +True. +
    + +
    +What considerations to take when choosing an GCP region for running a new application?
    + +* Services Availability: not all service (and all their features) are available in every region +* Reduced latency: deploy application in a region that is close to customers +* Compliance: some countries have more strict rules and requirements such as making sure the data stays within the borders of the country or the region. In that case, only specific region can be used for running the application +* Pricing: the pricing might not be consistent across regions so, the price for the same service in different regions might be different. +
    + +
    +True or False? All GCP services are available in all regions zones
    + +False. You can see [here](https://cloud.google.com/about/locations) which products/services available in each region. +
    + +#### gcloud + +
    +How to list all regions?
    + +`gcloud compute regions list` +
    + +### Resource Hierarchy + +
    +Explain resources hierarchy in GCP
    + +Organization + Folder + Project + Resoruces + +* Organizations - Company +* Folder - usually for departments, teams, products, etc. +* Project - can be different projects or same project but different environments (dev, staging, production) +* Resources - actual GCP services (Compute, App engine, Storage, etc.) + +
    + +
    +True or False? In a project, you can have one or more organizations
    + +False. It's quite the opposite. First there is an organization and under organization you can have one or more folder with one or more projects. +
    + +
    +True or False? A resource has to be associated with at least one project
    + +True. You can't have resources associate with no projects. +
    + +
    +True or False? Project name has to be globally unique
    + +True. +
    + +### IAM and Roles + +
    +Explain roles and permissions
    + +Role is an encapsulation of set of permissions. For example an "owner" role has more than 3000 assigned permissions to the different components and services of GCP. +
    + +
    +True or False? Permissive parent policy will always overrule restrictive child policy
    + +True +
    + +### Labels and Tags + +
    +What are labels?
    + +You can think about labels in GCP as sticky notes that you attach to different GCP resources. That makes it easier for example, to search for specific resources (like applying the label called "web-app" and search for all the resources that are related somehow to "web-app") +
    + +
    +Can you provide some examples to labels usage in GCP?
    + +* Location (cost center) +* Project (or environment, folder, etc.) +* Service type +* Service owner +* Application type +* Application owner +
    + +
    +What are network tags and how are they different from labels?
    + +As the name suggests, network tags can be applied only to network resources. +While labels don't affect the resources on which they are applied, network tags do affect resources (e.g. firewall access and networking routes) +
    + +#### gcloud + +
    +List the labels of an instance called "instance-1"
    + +`gcloud compute instances describe instance-1 --format "yaml(labels)"` +
    + +
    +Update a label to "app=db" for the instance called "instance-1"
    + +`gcloud compute instances update instance-1 --update-labels app=db` +
    + +
    +Remove the label "env" from an instance called "instance-1"
    + +`gcloud compute instances update instance-1 --remove-labels env` +
    + +### Compute Engine + +#### gcloud + +
    +Create an instance with the following properties: + +* name: instance-1 +* machine type: e2-micro +* labels: app=web, env=dev +
    + +`gcloud compute instances create instance-1 --labels app=web,env=dev --machine-type=e2-micro` +
    + +### Other + +
    +Tell me what do you know about GCP networking
    + +Virtual Private Cloud(VPC) network is a virtual version of physical network, implemented in Google's internal Network. VPC is a gloabal resource in GCP. +Subnetworks(subnets) are regional resources, ie., subnets can be created withinin regions. + +VPC are created in 2 modes, + +1. Auto mode VPC - One subnet in each region is created automatically by GCP while creating VPC + +2. Custom mode VPC - No subnets are automatically created. This type of network provides complete control over the subnets creation to the users. +
    + +
    +Explain Cloud Functions
    + +Google Cloud Functions is a serverless execution environment for building and connecting cloud services. With Cloud Functions you write simple, single-purpose functions that are attached to events emitted from your cloud infrastructure and services. Your function is triggered when an event being watched is fired. + +
    + +
    +What is Cloud Datastore?
    + +Cloud Datastore is a schemaless NoSQL datastore in Google's cloud. Applications can use Datastore to query your data with SQL-like queries that support filtering and sorting. Datastore replicates data across multiple datacenters, which provides a high level of read/write availability. + +
    + +
    +What network tags are used for?
    + +Network tags allow you to apply firewall rules and routes to a specific instance or set of instances: You make a firewall rule applicable to specific instances by using target tags and source tags. + +
    + +
    +What are flow logs? Where are they enabled?
    + +VPC Flow Logs records a sample of network flows sent from and received by VM instances, including instances used as Google Kubernetes Engine nodes. These logs can be used for network monitoring, forensics, real-time security analysis, and expense optimization. + +Enable Flow Logs + +1. Open VPC Network in GCP Console + +2. Click the name of the subnet + +3. Click EDIT button + +4. Set Flow Logs to On + +5. Click Save + + + +
    + +
    +How do you list buckets?
    + Two ways to do that: + + $ gsutil ls + + $ gcloud alpha storage ls + +
    + +
    +What Compute metadata key allows you to run code at startup?
    + +startap-script +
    + +
    +What the following commands does? `gcloud deployment-manager deployments create`
    + +Deployment Manager creates a new deployment. + +
    + +
    +What is Cloud Code?
    +It is a set of tools to help developers write, run and debug GCP kubernetes based applications. It provides built-in support for rapid iteration, debugging and running applications in development and production K8s environments. +
    + +### Google Kubernetes Engine (GKE) + +
    +What is GKE
    + +* It is the managed kubernetes service on GCP for deploying, managing and scaling containerised applications using Google infrastructure. +
    + +### Anthos + +
    +What is Anthos
    +It is a managed application platform for organisations like enterprises that require quick modernisation and certain levels +of consistency for their legacy applications in a hybrid or multicloud world. From this explanation the core ideas can be drawn from these statements; + +* Managed -> the customer does not need to worry about the underlying software intergrations, they just enable the API. +* application platform -> It consists of open source tools like K8s, Knative, Istio and Tekton +* Enterprises -> these are usually organisations with complex needs +* Consistency -> to have the same policies declaratively initiated to be run anywhere securely e.g on-prem, GCP or other-clouds (AWS or Azure) + +fun fact: Anthos is flower in greek, they grow in the ground (earth) but need rain from the clouds to flourish. +
    + +
    +List the technical components that make up Anthos
    + +* Infrastructure management - Google Kubernetes Engine (GKE) +* Cluster management - GKE, Ingress for Anthos +* Service management - Anthos Service Mesh +* Policy enforcement - Anthos Config Management, Anthos Enterprise Data Protection, Policy Controller +* Application deployment - CI/CD tools like Cloud Build, GitLab +* Application development - Cloud Code +
    + +
    +What is the primary computing environment for Anthos to easily manage workload deployment?
    + +* Google Kubernetes Engine (GKE) +
    + +
    +How does Anthos handle the control plane and node components for GKE?
    + +On GCP the kubernetes api-server is the only control plane component exposed to customers whilst compute engine manages +instances in the project. +
    + +
    +Which load balancing options are available?
    + +* Networking load balancing for L4 and HTTP(S) Load Balancing for L7 which are both managed services that do not require + additional configuration. +* Ingress for Anthos which allows the ability to deploy a load balancer that serves an application across multiple clusters + on GKE +
    + +
    +Can you deploy Anthos on AWS?
    + +* Yes, Anthos on AWS is now GA. For more read [here](https://cloud.google.com/anthos/gke/docs/aws) +
    + +
    +List and explain the enterprise security capabilities provided by Anthos
    + +* Control plane security - GCP manages and maintains the K8s control plane out of the box. The user can secure the api-server by using master authorized networks and private clusters. These allow the user to disable access on the public IP address by assigning a private IP address to the master. +* Node security - By default workloads are provisioned on Compute engine instances that use Google's Container Optimised OS. This operating system implements a locked-down firewall, limited user accounts with root disabled and a read-only filesystem. There is a further option to enable GKE Sandbox for stronger isolation in multi-tenant deployment scenarios. +* Network security - Within a created cluster VPC, Anthos GKE leverages a powerful software-defined network that enables simple Pod-to-Pod communications. Network policies allow locking down ingress and egress connections in a given namespace. Filtering can also be implemented to incoming load-balanced traffic for services that require external access, by supplying whitelisted CIDR IP ranges. +* Workload security - Running workloads run with limited privileges, default Docker AppArmor security policies are applied to all Kubernetes Pods. Workload identity for Anthos GKE aligns with the open source kubernetes service accounts with GCP service account permissions. +* Audit logging - Adminstrators are given a way to retain, query, process and alert on events of the deployed environments. +
    + +
    +How can workloads deployed on Anthos GKE on-prem clusters securely connect to Google Cloud services?
    + +* Google Cloud Virtual Private Network (Cloud VPN) - this is for secure networking +* Google Cloud Key Management Service (Cloud KMS) - for key management +
    + +
    +What is Island Mode configuration with regards to networking in Anthos GKE deployed on-prem?
    + +* This is when pods can directly talk to each other within a cluster, but cannot be reached from outside the cluster thus forming an "island" within the network that is not connected to the external network. +
    + +
    +Explain Anthos Config Management
    + +It is a core component of the Anthos stack which provides platform, service and security operators with a single, unified approach to multi-cluster management that spans both on-premises and cloud environments. It closely follows K8s best practices, favoring declarative approaches over imperative operations, and actively monitors cluster state and applies the desired state as defined in Git. It includes three key components as follows: + +1. An importer that reads from a central Git repository +2. A component that synchronises stored configuration data into K8s objects +3. A component that monitors drift between desired and actual cluster configurations with a capability of reconciliation when need rises. +
    + +
    +How does Anthos Config Management help?
    + +It follows common modern software development practices which makes cluster configuration, management and policy changes auditable, revertable, and versionable easily enforcing IT governance and unifying resource management in an organisation. +
    + +
    +What is Anthos Service Mesh?
    + +* It is a suite of tools that assist in monitoring and managing deployed services on Anthos of all shapes and sizes whether running in cloud, hybrid or multi-cloud environments. It leverages the APIs and core components from Istio, a highly configurable and open-source service mesh platform. +
    + +
    +Describe the two main components of Anthos Service Mesh
    + +1. Data plane - it consists of a set of distributed proxies that mediate all inbound and outbound network traffic between individual services which are configured using a centralised control plane and an open API +2. Control plane - is a fully managed offering outside of Anthos GKE clusters to simplify management overhead and ensure highest possible availability. +
    + +
    +What are the components of the managed control plane of Anthos Service Mesh?
    + +1. Traffic Director - it is GCP's fully managed service mesh traffic control plane, responsible for translating Istio API objects into configuration information for the distributed proxies, as well as directing service mesh ingress and egress traffic +2. Managed CA - is a centralised certificate authority responsible for providing SSL certificates to each of the distributed proxies, authentication information and distributing secrets +3. Operations tooling - formerly stackdriver, provides a managed ingestion point for observability and telemetry, specifically monitoring, tracing and logging data generated by each of the proxies. This powers the observability dashboard for operators to visually inspect their services and service dependencies assisting in the implementation of SRE best practices for monitoring SLIs and establishing SLOs. +
    + +
    +How does Anthos Service Mesh help?
    +Tool and technology integration that makes up Anthos service mesh delivers signficant operational benefits to Anthos environments, with minimal additional overhead such as follows: + +* Uniform observability - the data plane reports service to service communication back to the control plane generating a service dependency graph. Traffic inspection by the proxy inserts headers to facilitate distributed tracing, capturing and reporting service logs together with service-level metrics (i.e latency, errors, availability). +* Operational agility - fine-grained controls for managing the flow of inter-mesh (north-south) and intra-mesh (east-west) traffic are provided. +* Policy-driven security - policies can be enforced consistently across diverse protocols and runtimes as service communications are secured by default. +
    + +
    +List possible use cases of traffic controls that can be implemented within Anthos Service Mesh
    + +* Traffic splitting across differing service versions for canary or A/B testing +* Circuit breaking to prevent cascading failures +* Fault injection to help build resilient and fault-tolerant deployments +* HTTP header-based traffic steering between individual services or versions +
    + +
    +What is Cloud Run for Anthos?
    + +It is part of the Anthos stack that brings a serverless container experience to Anthos, offering a high-level platform experience on top of K8s clusters. It is built with Knative, an open-source operator for K8s that brings serverless application serving and eventing capabilities. +
    + +
    +How does Cloud Run for Anthos simplify operations?
    + +Platform teams in organisations that wish to offer developers additional tools to test, deploy and run applications can use Knative to enhance this experience on Anthos as Cloud Run. Below are some of the benefits; + +* Easy migration from K8s deployments - Without Cloud Run, platform engineers have to configure deployment, service, and HorizontalPodAutoscalers(HPA) objects to a loadbalancer and autoscaling. If application is already serving traffic it becomes hard to change configurations or roll back efficiently. Using Cloud Run all this is managed thus the Knative service manifest describes the application to be autoscaled and loadbalanced +* Autoscaling - a sudden traffic spike may cause application containers in K8s to crash due to overload thus an efficient automated autoscaling is executed to serve the high volume of traffic +* Networking - it has built-in load balancing capabilities and policies for traffic splitting between multiple versions of an application. +* Releases and rollouts - supports the notion of the Knatibe API's revisions which describe new versions or different configurations of your application and canary deployments by splitting traffic. +* Monitoring - observing and recording metrics such as latency, error rate and requests per second. +
    + +
    +List and explain three high-level out of the box autoscaling primitives offered by Cloud Run for Anthos that do not exist in K8s natively
    + +* Rapid, request-based autoscaling - default autoscalers monitor request metrics which allows Cloud Run for Anthos to handle spiky traffic patterns smoothly +* Concurrency controls - limits such as max in-flight requests per container are enforced to ensure the container does not become overloaded and crash. More containers are added to handle the spiky traffic, buffering the requests. +* Scale to zero - if an application is inactive for a while Cloud Run scales it down to zero to reduce its footprint. Alternatively one can turn off scale-to-zero to prevent cold starts. +
    + +
    +List some Cloud Run for Anthos use cases
    + +As it does not support stateful applications or sticky sessions, it is suitable for running stateless applications such as: + +* Machine learning model predictions e.g Tensorflow serving containers +* API gateways, API middleware, web front ends and Microservices +* Event handlers, ETL +
    \ No newline at end of file diff --git a/topics/gcp/exercises/assign_roles/exercise.md b/topics/gcp/exercises/assign_roles/exercise.md new file mode 100644 index 0000000..17e32a2 --- /dev/null +++ b/topics/gcp/exercises/assign_roles/exercise.md @@ -0,0 +1,13 @@ +# Assign Roles + +## Objectives + +1. Assign the following roles to a member in your organization + 1. Compute Storage Admin + 2. Compute Network Admin + 3. Compute Security Admin +2. Verify roles were assigned + +## Solution + +Click [here](solution.md) to view the solution diff --git a/topics/gcp/exercises/assign_roles/main.tf b/topics/gcp/exercises/assign_roles/main.tf new file mode 100644 index 0000000..cd73ae4 --- /dev/null +++ b/topics/gcp/exercises/assign_roles/main.tf @@ -0,0 +1,19 @@ +locals { + roles = [ + "roles/compute.storageAdmin", + "roles/compute.networkAdmin", + "roles/compute.securityAdmin" + ] +} + +resource "google_service_account" "some_member" { + account_id = "${substr(var.env_id, 0, min(length(var.env_id), 10))}-some-member" + display_name = "${var.env_id} some-member" +} + +resource "google_project_iam_member" "storageAdminMaster" { + for_each = toset(concat(local.roles)) + project = "${var.project_id}" + role = each.key + member = "serviceAccount:${google_service_account.some_member.email}" +} \ No newline at end of file diff --git a/topics/gcp/exercises/assign_roles/solution.md b/topics/gcp/exercises/assign_roles/solution.md new file mode 100644 index 0000000..dfb9ac5 --- /dev/null +++ b/topics/gcp/exercises/assign_roles/solution.md @@ -0,0 +1,23 @@ +# Assign Roles + +## Objectives + +1. Assign the following roles to a member in your organization + 1. Compute Storage Admin + 2. Compute Network Admin + 3. Compute Security Admin +2. Verify roles were assigned + +## Solution + +### Console + +1. Go to IAM & Admin +2. Click on IAM and then on the "Add" button + 1. Choose the member account to whom the roles will be added + 2. Under select role, search for the specified roles under "Objectives" and click on "Save" +2. The member should now be able to go to the compute engine API and see the resources there. + +### Terraform + +Click [here](main.tf) to view the Terraform main.tf file \ No newline at end of file diff --git a/topics/gcp/exercises/assign_roles/vars.tf b/topics/gcp/exercises/assign_roles/vars.tf new file mode 100644 index 0000000..9960253 --- /dev/null +++ b/topics/gcp/exercises/assign_roles/vars.tf @@ -0,0 +1,7 @@ +variable "project_id" { + type = string +} + +variable "env_id" { + type = string +} \ No newline at end of file diff --git a/topics/gcp/exercises/assign_roles/versions.tf b/topics/gcp/exercises/assign_roles/versions.tf new file mode 100644 index 0000000..694c710 --- /dev/null +++ b/topics/gcp/exercises/assign_roles/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">=1.3.0" + + required_providers { + google = { + source = "hashicorp/google" + version = ">= 4.10.0, < 5.0" + } + } +} \ No newline at end of file diff --git a/topics/gcp/exercises/create_project/exercise.md b/topics/gcp/exercises/create_project/exercise.md new file mode 100644 index 0000000..e686c75 --- /dev/null +++ b/topics/gcp/exercises/create_project/exercise.md @@ -0,0 +1,9 @@ +# Create a Project + +## Objectives + +1. Create a project with a unique name + +## Solution + +Click [here](solution.md) to view the solution \ No newline at end of file diff --git a/topics/gcp/exercises/create_project/main.tf b/topics/gcp/exercises/create_project/main.tf new file mode 100644 index 0000000..ca1d030 --- /dev/null +++ b/topics/gcp/exercises/create_project/main.tf @@ -0,0 +1,10 @@ +resource "google_project" "gcp_project" { + name = "Some Project" + project_id = "some-unique-project-id" + folder_id = google_folder.some_folder.name +} + +resource "google_folder" "some_folder" { + display_name = "Department 1" + parent = "organizations/some-organization" +} \ No newline at end of file diff --git a/topics/gcp/exercises/create_project/solution.md b/topics/gcp/exercises/create_project/solution.md new file mode 100644 index 0000000..b488ba7 --- /dev/null +++ b/topics/gcp/exercises/create_project/solution.md @@ -0,0 +1,19 @@ +# Create a Project + +## Objectives + +1. Create a project with a unique name + +## Solution + +### Console + +1. Click in the top bar on "New Project" (if you already have a project then, click on the project name and then "New Project") or in the search bar insert "Create Project". +2. Insert a globally unique project name +3. Optionally choose an organization +4. Optionally put it under a specific folder +5. Click on "Create" :) + +### Terraform + +Click [here](main.tf) to view the solution \ No newline at end of file diff --git a/topics/gcp/exercises/create_project/versions.tf b/topics/gcp/exercises/create_project/versions.tf new file mode 100644 index 0000000..694c710 --- /dev/null +++ b/topics/gcp/exercises/create_project/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">=1.3.0" + + required_providers { + google = { + source = "hashicorp/google" + version = ">= 4.10.0, < 5.0" + } + } +} \ No newline at end of file diff --git a/topics/gcp/exercises/instance_101/exercise.md b/topics/gcp/exercises/instance_101/exercise.md new file mode 100644 index 0000000..e01caa7 --- /dev/null +++ b/topics/gcp/exercises/instance_101/exercise.md @@ -0,0 +1,17 @@ +# Create an Instance + +## Objectives + +1. Create a VM instance with the following properties + 1. name: instance-1 + 2. type: e2-micro + 3. labels: + 1. app: web + 2. env: dev +2. Using the CLI (gcloud) perform the following operations: + 1. Update "app" label to "db" + 2. Remove "env" label + +## Solution + +Click [here](solution.md) to view the solution \ No newline at end of file diff --git a/topics/gcp/exercises/instance_101/main.tf b/topics/gcp/exercises/instance_101/main.tf new file mode 100644 index 0000000..c407c00 --- /dev/null +++ b/topics/gcp/exercises/instance_101/main.tf @@ -0,0 +1,21 @@ +resource "google_compute_network" "vpc_network" { + name = "my-custom-mode-network" + auto_create_subnetworks = false + mtu = 1460 +} + +resource "google_compute_subnetwork" "default" { + name = "my-custom-subnet" + ip_cidr_range = "10.0.1.0/24" + region = "us-west1" + network = google_compute_network.vpc_network.id +} + +resource "google_compute_instance" "default" { + name = "instance-1" + machine_type = "e2-micro" + zone = "us-west1-a" + labels = { + app = "db" + } +} \ No newline at end of file diff --git a/topics/gcp/exercises/instance_101/solution.md b/topics/gcp/exercises/instance_101/solution.md new file mode 100644 index 0000000..0d3ac9e --- /dev/null +++ b/topics/gcp/exercises/instance_101/solution.md @@ -0,0 +1,45 @@ +# Create an Instance + +## Objectives + +1. Create a VM instance with the following properties + 1. name: instance-1 + 2. type: e2-micro + 3. labels: + 1. app: web + 2. env: dev +2. Using the CLI (gcloud) perform the following operations: + 1. Update "app" label to "db" + 2. Remove "env" label + +## Solution + +### Console + +1. Go to Compute Engine -> VM instances +2. Click on "Create Instance" + 1. Insert the name "instance-1" + 2. Click on "Add label" and add the following labels: + 1. app: web + 2. env: dev + 3. Choose machine type: e2-micro +3. Click on "Create" +4. Selected the created instance and click on "show info panel" + 1. Click on "labels" tab and change the value of "app" label to "db" + 2. Remove the "env" label + +### Shell + +``` +gcloud config set project +gcloud config set compute/region +gcloud config set compute/zone + +gcloud compute instances create instance-1 --labels app=web,env=dev --machine-type=e2-micro +gcloud compute instances update instance-1 --update-labels app=db +gcloud compute instances update instance-1 --remove-labels env +``` + +### Terraform + +Click [here](main.tf) to view the main.tf file \ No newline at end of file diff --git a/topics/gcp/exercises/instance_101/versions.tf b/topics/gcp/exercises/instance_101/versions.tf new file mode 100644 index 0000000..694c710 --- /dev/null +++ b/topics/gcp/exercises/instance_101/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">=1.3.0" + + required_providers { + google = { + source = "hashicorp/google" + version = ">= 4.10.0, < 5.0" + } + } +} \ No newline at end of file