From 8503e924147c071a3b21c7802b501b00434eb526 Mon Sep 17 00:00:00 2001 From: Amit Lichtenberg Date: Tue, 21 May 2024 12:19:26 +0300 Subject: [PATCH] MySQL integration tutorial (#240) --- docs/features/mysql/_category_.json | 8 + docs/features/mysql/index.mdx | 111 ++++++++++ docs/features/mysql/reference.mdx | 45 ++++ docs/features/mysql/tutorials/_category_.json | 5 + docs/features/mysql/tutorials/mysql.mdx | 207 ++++++++++++++++++ docs/features/postgresql/index.mdx | 4 +- docs/features/postgresql/reference.mdx | 15 +- .../postgresql/tutorials/postgres.mdx | 44 +--- docs/overview/otterize-cloud/README.mdx | 2 +- docs/reference/IBAC-Overview.mdx | 4 +- static/code-examples/mysql/client-server.yaml | 79 +++++++ static/code-examples/mysql/clientintents.yaml | 16 ++ static/code-examples/mysql/db-setup.sql | 9 + .../mysql/mysqlserverconfig.yaml | 9 + .../code-examples/postgres/clientintents.yaml | 17 ++ .../postgres/postgresqlserverconfig.yaml | 9 + static/img/icons/mysql.svg | 2 + static/img/quick-tutorials/mysql/social.png | Bin 0 -> 84277 bytes 18 files changed, 547 insertions(+), 39 deletions(-) create mode 100644 docs/features/mysql/_category_.json create mode 100644 docs/features/mysql/index.mdx create mode 100644 docs/features/mysql/reference.mdx create mode 100644 docs/features/mysql/tutorials/_category_.json create mode 100644 docs/features/mysql/tutorials/mysql.mdx create mode 100644 static/code-examples/mysql/client-server.yaml create mode 100644 static/code-examples/mysql/clientintents.yaml create mode 100644 static/code-examples/mysql/db-setup.sql create mode 100644 static/code-examples/mysql/mysqlserverconfig.yaml create mode 100644 static/code-examples/postgres/clientintents.yaml create mode 100644 static/code-examples/postgres/postgresqlserverconfig.yaml create mode 100644 static/img/icons/mysql.svg create mode 100644 static/img/quick-tutorials/mysql/social.png diff --git a/docs/features/mysql/_category_.json b/docs/features/mysql/_category_.json new file mode 100644 index 000000000..dc681e687 --- /dev/null +++ b/docs/features/mysql/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "MySQL", + "position": 5, + "collapsed": true, + "customProps": { + "image": "/img/icons/mysql.svg" + } +} diff --git a/docs/features/mysql/index.mdx b/docs/features/mysql/index.mdx new file mode 100644 index 000000000..87edbaf43 --- /dev/null +++ b/docs/features/mysql/index.mdx @@ -0,0 +1,111 @@ +--- +sidebar_position: 1 +title: MySQL | Overview +hide_title: true +--- + +import DocsLinkCard from "@site/src/components/LinkCard"; + +export const mysql_tutorials = [ + { + title: 'Just-in-time MySQL Access', + description: 'Learn how to manage just-in-time users and SQL GRANTs', + url: '/features/mysql/tutorials/mysql' + }, +]; + +# MySQL + +Otterize is able to create just-in-time username-and-password pairs for your service, providing them as a Kubernetes Secret that can be mounted to file or mapped to environment variables, as well as `GRANT`ing access to databases and tables, based on `ClientIntents` ([Intent-Based Access Control](/overview/intent-based-access-control)) declarations. + +### Tutorials + +To learn how to use the Intents Operator and Credentials Operator to enforce access using MySQL GRANTs, try one of these quickstart tutorials: + + + + + +### How does Otterize work with MySQL? + +The Otterize credentials operator will create a unique MySQL username-password combination for each service's use, exposed via a Kubernetes Secret. The service will use these credentials to connect to the database. `ClientIntents` will define the access required by that service. As the intents are applied, The Otterize intents operator will keep the database's list of users and GRANTs up to date so that the service is able to access it. + +1. To get started, your cluster must have Otterize deployed. +2. You'll need to create a `MySQLServerConfig` in your cluster, providing a connection URL and admin-level credentials for Otterize to manage permissions in your database. Below is an example `MySQLServerConfig` resource. +```yaml +apiVersion: k8s.otterize.com/v1alpha3 +kind: MySQLServerConfig +metadata: + name: mysql-tutorial-db # database instance name - should match the target in ClientIntents +spec: + address: # Your MySQL servers address + credentials: + username: # Username Otterize will connect with & configure permissions as + password: # Password for above username +``` + +3. Each service can request a username-password Secret to be created, by annotating the Pod with `credentials-operator.otterize.com/user-password-secret-name`. Below is an example of that annotation and passing the generated credentials into a container with environmental variables. + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: server +spec: + replicas: 1 + selector: + matchLabels: + app: server + template: + metadata: + annotations: + # highlight-next-line + credentials-operator.otterize.com/user-password-secret-name: server-creds + labels: + app: server + spec: + serviceAccountName: server + containers: + - name: server + imagePullPolicy: Always + image: 'supercool/my-example-container' + ports: + - containerPort: 80 + env: + - name: DB_SERVER_USER + valueFrom: + secretKeyRef: + name: server-creds + key: username + - name: DB_SERVER_PASSWORD + valueFrom: + secretKeyRef: + name: server-creds + key: password +``` + + +4. Apply `ClientIntents` and the specified access will be `GRANT`ed to the service in the `ClientIntents`. + + +```yaml +apiVersion: k8s.otterize.com/v1alpha3 +kind: ClientIntents +metadata: + name: client-intents-for-server + namespace: otterize-tutorial-mysql +spec: + service: + name: server + calls: + - name: mysql-tutorial-db # Same name as MySQLServerConfig metadata.name + type: database + databaseResources: + - databaseName: otterize-tutorial + table: example + operations: + - SELECT + - INSERT +``` + +5. Done! \ No newline at end of file diff --git a/docs/features/mysql/reference.mdx b/docs/features/mysql/reference.mdx new file mode 100644 index 000000000..f66debc4d --- /dev/null +++ b/docs/features/mysql/reference.mdx @@ -0,0 +1,45 @@ +--- +sidebar_position: 3 +title: Reference +--- + +### MySQLServerConfig example (YAML) +```yaml +apiVersion: k8s.otterize.com/v1alpha3 +kind: MySQLServerConfig +metadata: + name: otterize-tutorial-mysql # database instance name - should match the target in ClientIntents +spec: + address: # Your MySQL servers address + credentials: + username: # Username Otterize will connect with & configure permissions as (typically 'admin') + password: # Password for above username +``` + +### ClientIntents example (YAML) + +```yaml +apiVersion: k8s.otterize.com/v1alpha3 +kind: ClientIntents +metadata: + name: client-intents-for-server + namespace: otterize-tutorial-mysql +spec: + service: + # Service requiring access to MySQL + name: server + calls: + # This name will need to match the MySQLServerConfig metadata.name field + - name: otterize-tutorial-mysql + type: database + databaseResources: + - databaseName: otterize_tutorial + # Optional table name, if omitted all tables will be granted access + table: example + # Operations being granted, options include SELECT, INSERT, UPDATE, DELETE, ALL + operations: + - SELECT + - INSERT +``` + + diff --git a/docs/features/mysql/tutorials/_category_.json b/docs/features/mysql/tutorials/_category_.json new file mode 100644 index 000000000..bdfe77bf2 --- /dev/null +++ b/docs/features/mysql/tutorials/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Tutorials", + "position": 2, + "collapsed": false +} diff --git a/docs/features/mysql/tutorials/mysql.mdx b/docs/features/mysql/tutorials/mysql.mdx new file mode 100644 index 000000000..6217dfb90 --- /dev/null +++ b/docs/features/mysql/tutorials/mysql.mdx @@ -0,0 +1,207 @@ +--- +sidebar_position: 2 +title: Just-in-time MySQL access +image: /img/quick-tutorials/mysql/social.png +--- + +import CodeBlock from "@theme/CodeBlock"; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +export const Terminal = ({children}) => ( +
+ {children} +
+); + + +# Overview +This tutorial will deploy an example cluster to highlight Otterize's MySQL capabilities. Within that cluster is a client service that hits an endpoint on a server, which then connects to a database. The server runs two different database operations: +1. An `INSERT` operation to append a table within the database +2. A `SELECT` operation to validate the updates. + +The server needs appropriate permissions to access the database. You could use one admin user for all services, which is insecure and is the cause for many security breaches. With Otterize, you can specify required access, and have Otterize create users and perform correctly scoped SQL GRANTs just in time, as the service spins up and down. + +In this tutorial, we will: +* Optionally, spin up a MySQL database instance, based on Amazon RDS for MySQL. Alternatively, you could use any MySQL server of your choice. +* Deploy an example cluster +* Deploy Otterize in our cluster and give it access to our database instance +* Declare a ClientIntents resource for the server, specifying required access +* See that the required access has been granted + +# Prerequisites + +#### 1. Minikube Cluster +
+ Prepare a Kubernetes cluster with Minikube + +For this tutorial you'll need a local Kubernetes cluster. Having a cluster with a [CNI](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) that supports [NetworkPolicies](https://kubernetes.io/docs/concepts/services-networking/network-policies/) isn't required for this tutorial, but is recommended so that your cluster works with other tutorials. + +If you don't have the Minikube CLI, first [install it](https://minikube.sigs.k8s.io/docs/start/). + +Then start your Minikube cluster with Calico, in order to enforce network policies. + +```shell +minikube start --cpus=4 --memory 4096 --disk-size 32g --cni=calico +``` +
+ +#### 2. Deploy Otterize +To deploy Otterize, head over to [Otterize Cloud](https://app.otterize.com) and associate a Kubernetes cluster on the [Integrations page](https://app.otterize.com/integrations), and follow the instructions. If you already have a Kubernetes cluster connected, skip this step. + +#### 3. Deploy a MySQL database instance +Already have a MySQL database instance? [Skip to the tutorial.](#tutorial) + +
+Deploy a MySQL database instance, based on Amazon RDS for MySQL + +Follow the [installation instructions on the AWS RDS documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html#CHAP_GettingStarted.Creating.MySQL). + +
  • + You may use the Free tier template for this tutorial. +
  • +
  • + Under "Settings", choose "Auto generate password". Make sure you save the generated password after the instance is created. +
  • +
  • + Under "Connectivity", enable public access to allow access from your Kubernetes cluster. Otterize will require that access to manage credentials for you. + Additionally, make sure you choose a security group that allows inbound access from the internet. +
  • + +
    + + + +# Tutorial + +### Setup MySQL database and table for the tutorial +Throughout this tutorial, we will refer to your MySQL host & credentials via environment variables, so make sure to set them up: +```shell +export MYSQLHOST= +export MYSQLPASSWORD= +``` + +Next, run the following command to create a database named `otterize_tutorial` and a table named `example` in your MySQL instance. +Our tutorial server will use this database and table to perform `INSERT` and `SELECT` operations. +```shell +export MYSQL_PWD=$MYSQLPASSWORD +curl ${ABSOLUTE_URL}/code-examples/mysql/db-setup.sql | mysql -u admin -h $MYSQLHOST --verbose +``` + +### Deploy tutorial services and request database credentials +Next, set up the namespace used for our tutorial and deploy the client & server services in it: + +```shell +kubectl create namespace otterize-tutorial-mysql +kubectl apply -n otterize-tutorial-mysql -f ${ABSOLUTE_URL}/code-examples/mysql/client-server.yaml +kubectl patch deployment -n otterize-tutorial-mysql server --type='json' -p="[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/0/env/0/value\", \"value\": \"$MYSQLHOST\"}]" +``` + + +
    +Expand to see the deployment YAML + +```yaml +{@include: ../../../../static/code-examples/mysql/client-server.yaml} +``` +
    + +Our server's Deployment spec specify an annotation on its Pod, which requests that the Otterize operator provision a username and password for it: +```yaml + template: + metadata: + annotations: + credentials-operator.otterize.com/user-password-secret-name: server-creds +``` +This specifies that the secret `server-creds` will be populated with keys containing the username and password used by this pod to connect to the database. +The secret will only be created by the Otterize operator after it is integrated with your database by applying a MySQLServerConfig resources. + + +### View logs for the server +After the client, server, and database are up and running, we can see that the server does not have the appropriate access to the database by inspecting the logs with the following command. + +```shell +kubectl logs -f -n otterize-tutorial-mysql deploy/server +``` + +Example log: + + Unable to perform INSERT operation +

    + Unable to perform SELECT operation +
    + + +### Deploy a MySQLServerConfig to allow Otterize DB access +Let's apply a `MySQLServerConfig` so Otterize will know how to access our database instance: +```shell +kubectl apply -n otterize-tutorial-mysql -f ${ABSOLUTE_URL}/code-examples/mysql/mysqlserverconfig.yaml +kubectl patch mysqlserverconfig -n otterize-tutorial-mysql mysql-tutorial-db --type='json' -p="[{\"op\": \"replace\", \"path\": \"/spec/address\", \"value\": \"$MYSQLHOST\"}, {\"op\": \"replace\", \"path\": \"/spec/credentials/password\", \"value\": \"$MYSQLPASSWORD\"}]" +``` + +This applies the following `MySQLServerConfig` to your cluster, and patches it with your DB instance & credentials: + + +```yaml +{@include: ../../../../static/code-examples/mysql/mysqlserverconfig.yaml} +``` + +The above CRD tells Otterize how to access a database instance named `mysql-tutorial-db`, meaning that when intents +are applied requesting access permissions to `mysql-tutorial-db`, the Otterize operator will be able to configure +them. + +In this tutorial, we use the admin user to grant Otterize permissions to create users and grant them access to the database. +In a production environment, it is recommended to create a dedicated user for Otterize, and grant it the necessary permissions to create and manage other users. + +:::caution +The type MySQLServerConfig should be considered as sensitive and require high cluster privileges to access. +::: + + +### Define your ClientIntents + +ClientIntents are Otterize’s way of defining access through unique relationships, which lead to perfectly scoped access. In this example, we provide our `server` workload the ability to insert and select records to allow it to access the database. + +Below is our `intents.yaml` file. As you can see, it is scoped to our database named `otterize_tutorial` and our `example` table. We also have limited the access to just `SELECT` and `INSERT` operations. We could add more databases, tables, or operations if our service required more access. + +Specifying the table and operations is optional. If you don't specify the table, access will be granted to all tables in the specified database. If you don't specify the operations, all operations will be allowed. +```yaml +{@include: ../../../../static/code-examples/mysql/clientintents.yaml} +``` +We can now apply our intents. Behind the scenes, the Otterize operator created the user for our `server` workload and executed `GRANT` queries on the database, making our `SELECT` and `INSERT` errors disappear. + +```shell +kubectl apply -n otterize-tutorial-mysql -f ${ABSOLUTE_URL}/code-examples/mysql/clientintents.yaml +``` + +### View logs for the server +We can now view the server logs once again. This time, we should see that the server has the appropriate access to the database: + +```shell +kubectl logs -f -n otterize-tutorial-mysql deploy/server +``` + +Example log: + +Successfully INSERTED into our table + +Successfully SELECTED, most recent value: 2024-04-30T13:20:46Z + + +That’s it! If your service’s functionality changes, adding or removing access is as simple as updating your ClientIntents definitions. For fun, try altering the `operations` to just `SELECT` or `INSERT`. + +# Teardown +To remove the deployed examples, run: +```shell +kubectl delete clientintents.k8s.otterize.com -n otterize-tutorial-mysql client-intents-for-server +kubectl delete namespace otterize-tutorial-mysql +``` diff --git a/docs/features/postgresql/index.mdx b/docs/features/postgresql/index.mdx index 9355e2e12..f57a8df69 100644 --- a/docs/features/postgresql/index.mdx +++ b/docs/features/postgresql/index.mdx @@ -21,7 +21,7 @@ export const postgres_tutorials = [ # PostgreSQL -Otterize is able to create just-in-time username-and-password pairs for your service, providing them as a Kubernetes Secret that can be mounted to file or mapped to environment variables, as well as `GRANT`ing access to databases and tables, based on `ClientIntents` ([Intents-Based Access Control](/overview/intent-based-access-control)) declarations. +Otterize is able to create just-in-time username-and-password pairs for your service, providing them as a Kubernetes Secret that can be mounted to file or mapped to environment variables, as well as `GRANT`ing access to databases and tables, based on `ClientIntents` ([Intent-Based Access Control](/overview/intent-based-access-control)) declarations. In addition, Otterize can map the access to your PostgreSQL database, showing you which service is accessing which database, table and which operation it's performing. This can be used to automatically generate the `ClientIntents` declarations. ### Tutorials @@ -104,7 +104,7 @@ spec: service: name: server calls: - - name: postgres-tutorial-db # Same name as our PostgresSQLServerConfig metadata.name + - name: postgres-tutorial-db # Same name as our PostgreSQLServerConfig metadata.name type: database databaseResources: - databaseName: otterize-tutorial diff --git a/docs/features/postgresql/reference.mdx b/docs/features/postgresql/reference.mdx index 61f63b245..019ffb385 100644 --- a/docs/features/postgresql/reference.mdx +++ b/docs/features/postgresql/reference.mdx @@ -3,6 +3,19 @@ sidebar_position: 3 title: Reference --- +### PostgreSQLServerConfig example (YAML) +```yaml +apiVersion: k8s.otterize.com/v1alpha3 +kind: PostgreSQLServerConfig +metadata: + name: otterize-tutorial-postgres # database instance name - should match the target in ClientIntents +spec: + address: # Your Postgres address + credentials: + username: # Username Otterize will connect with & configure permissions as + password: # Password for above username +``` + ### ClientIntents example (YAML) ```yaml @@ -16,7 +29,7 @@ spec: # Service requiring access to PostgreSQL name: server calls: - # This name will need to match the provided integration name + # This name will need to match the PostgreSQLServerConfig metadata.name field - name: otterize-tutorial-postgres type: database databaseResources: diff --git a/docs/features/postgresql/tutorials/postgres.mdx b/docs/features/postgresql/tutorials/postgres.mdx index f73c08b34..d1a37309e 100644 --- a/docs/features/postgresql/tutorials/postgres.mdx +++ b/docs/features/postgresql/tutorials/postgres.mdx @@ -63,7 +63,7 @@ To deploy Otterize, head over to [Otterize Cloud](https://app.otterize.com) and ### Deploy tutorial services and request database credentials This will set up the namespace we will use for our tutorial and deploy the client, server, and database. -Our server's Deployment spec will specify an annotation on the Pod, which requests that the credentials operator will provision a username and password for the server. +Our server's Deployment spec will specify an annotation on the Pod, which requests that the Otterize operator will provision a username and password for the server. ```yaml template: metadata: @@ -71,7 +71,7 @@ Our server's Deployment spec will specify an annotation on the Pod, which reques credentials-operator.otterize.com/user-password-secret-name: server-creds ``` This specifies that the secret `server-creds` will have keys with the username and password to connect to the database. -The secret will only be created once the database is integrated with Otterize Cloud. +The secret will only be created by the Otterize operator after it is integrated with your database by applying a MySQLServerConfig resources. ``` shell kubectl create namespace otterize-tutorial-postgres @@ -80,18 +80,10 @@ kubectl apply -n otterize-tutorial-postgres -f ${ABSOLUTE_URL}/code-examples/pos ### Deploy a PostgreSQLServerConfig to allow Otterize DB access ```yaml -apiVersion: k8s.otterize.com/v1alpha3 -kind: PostgreSQLServerConfig -metadata: - name: postgres-tutorial-db -spec: - address: database.otterize-tutorial-postgres.svc.cluster.local:5432 - credentials: - username: otterize-tutorial - password: jeffdog523 +{@include: ../../../../static/code-examples/postgres/postgresqlserverconfig.yaml} ``` The above CRD tells Otterize how to access a database instance named `postgres-tutorial-db`, meaning that when intents -are applied requesting access permissions to `postgres-tutorial-db`, Otterize operators will be able to configure +are applied requesting access permissions to `postgres-tutorial-db`, the Otterize operator will be able to configure them. In this tutorial, the `database` workload already comes with the predefined username & password, but for future uses a @@ -102,7 +94,7 @@ The type PostgreSQLServerConfig should be considered as sensitive and require hi Let's apply the above `PostgreSQLServerConfig` so Otterize will know how to access our database instance. ```shell -kubectl apply -f pgserverconf.yaml +kubectl apply -n otterize-tutorial-postgres -f ${ABSOLUTE_URL}/code-examples/postgres/postgresqlserverconfig.yaml ``` ### View logs for the server @@ -127,32 +119,18 @@ Below is our `intents.yaml` file. As you can see, it is scoped to our database n Specifying the table and operations is optional. If you don't specify the table, access will be granted to all tables in the specified database. If you don't specify the operations, all operations will be allowed. ```yaml -apiVersion: k8s.otterize.com/v1alpha3 -kind: ClientIntents -metadata: - name: client-intents-for-server - namespace: otterize-tutorial-postgres -spec: - service: - name: server - calls: - - name: postgres-tutorial-db # Same name as our PostgresSQLServerConfig metadata.name - type: database - databaseResources: - - databaseName: otterize-tutorial - table: public.example - operations: - - SELECT - - INSERT +{@include: ../../../../static/code-examples/postgres/clientintents.yaml} ``` -We can now apply our intents. Behind the scenes,the Otterize credentials-operator created the user for our `server` workload while the intents-operator ran `GRANT` queries on the database, making our `SELECT` and `INSERT` errors disappear. +We can now apply our intents. Behind the scenes, the Otterize operator created the user for our `server` workload and executed `GRANT` queries on the database, making our `SELECT` and `INSERT` errors disappear. ```shell -kubectl apply -f intents.yaml +kubectl apply -n otterize-tutorial-postgres -f ${ABSOLUTE_URL}/code-examples/postgres/clientintents.yaml ``` -Example log: +### View logs for the server +We can now view the server logs once again. This time, we should see that the server has the appropriate access to the database: + Successfully INSERTED into our table diff --git a/docs/overview/otterize-cloud/README.mdx b/docs/overview/otterize-cloud/README.mdx index 6aba3b4e7..fae41a366 100644 --- a/docs/overview/otterize-cloud/README.mdx +++ b/docs/overview/otterize-cloud/README.mdx @@ -2,7 +2,7 @@ title: Otterize Cloud --- -Otterize Cloud provides a cloud-based control plane for deploying and managing [intents-based access control (IBAC)](/overview/intent-based-access-control). +Otterize Cloud provides a cloud-based control plane for deploying and managing [intent-based access control (IBAC)](/overview/intent-based-access-control). It currently supports IBAC within Kubernetes clusters, configuring access between pods and access to Kafka nodes using network policies and Kafka ACLs. Soon, Otterize Cloud will also support IBAC across clusters and non-Kubernetes services and resources (e.g. standalone and managed Kafka, RDS, etc.). diff --git a/docs/reference/IBAC-Overview.mdx b/docs/reference/IBAC-Overview.mdx index 721bc2720..729784d0f 100644 --- a/docs/reference/IBAC-Overview.mdx +++ b/docs/reference/IBAC-Overview.mdx @@ -55,7 +55,7 @@ the **enforced access layer**. -To implement IBAC across heterogeneous environments, IBAC must also solve for the problem of heterogeneous service identities. (Intents-based access control incorporates identity-based access control.) Since IBAC does not require developers to know about identity mechanisms any more than about authorization mechanisms, there is the requirement to **bridge the identity** of the client service to identities recognized by the target service’s infrastructures and enforcement mechanisms. Otterize builds in identity bridging mechanisms into all its integrations. +To implement IBAC across heterogeneous environments, IBAC must also solve for the problem of heterogeneous service identities. (Intent-based access control incorporates identity-based access control.) Since IBAC does not require developers to know about identity mechanisms any more than about authorization mechanisms, there is the requirement to **bridge the identity** of the client service to identities recognized by the target service’s infrastructures and enforcement mechanisms. Otterize builds in identity bridging mechanisms into all its integrations. ### IBAC and security @@ -68,7 +68,7 @@ so when secure access becomes easy, it's also more prevalent, leading to fewer s Intent-based access control doesn't fly in the face of organizational security policies, and it certainly doesn't replace them. IBAC aligns access controls with the needs of the organization. -It captures and makes explicit the *intents* of developers and their the code, +It captures and makes explicit the *intents* of developers and their code, enables processes for acting on those intents to allow or deny access, and makes explicit the enforcement that's actually put in place. One org might decide that it's best to automatically approve all intents once they undergo code review and apply diff --git a/static/code-examples/mysql/client-server.yaml b/static/code-examples/mysql/client-server.yaml new file mode 100644 index 000000000..7329c3934 --- /dev/null +++ b/static/code-examples/mysql/client-server.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: server +spec: + replicas: 1 + selector: + matchLabels: + app: server + template: + metadata: + annotations: + credentials-operator.otterize.com/user-password-secret-name: server-creds + labels: + app: server + spec: + serviceAccountName: server + containers: + - name: server + imagePullPolicy: Always + image: 'otterize/mysql-tutorial-server' + ports: + - containerPort: 80 + env: + - name: DB_HOST + value: database + - name: DB_NAME + value: otterize_example + - name: DB_PORT + value: "3306" + - name: DB_SERVER_USER + valueFrom: + secretKeyRef: + name: server-creds + key: username + - name: DB_SERVER_PASSWORD + valueFrom: + secretKeyRef: + name: server-creds + key: password +--- +apiVersion: v1 +kind: Service +metadata: + name: server +spec: + type: ClusterIP + selector: + app: server + ports: + - name: http + port: 80 + targetPort: 80 +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: client +spec: + replicas: 1 + selector: + matchLabels: + app: client + template: + metadata: + labels: + app: client + spec: + containers: + - name: client + imagePullPolicy: Always + image: 'otterize/mysql-tutorial-client' + ports: + - containerPort: 80 diff --git a/static/code-examples/mysql/clientintents.yaml b/static/code-examples/mysql/clientintents.yaml new file mode 100644 index 000000000..89ffeb724 --- /dev/null +++ b/static/code-examples/mysql/clientintents.yaml @@ -0,0 +1,16 @@ +apiVersion: k8s.otterize.com/v1alpha3 +kind: ClientIntents +metadata: + name: client-intents-for-server +spec: + service: + name: server + calls: + - name: mysql-tutorial-db + type: database + databaseResources: + - databaseName: otterize_example + table: example + operations: + - SELECT + - INSERT \ No newline at end of file diff --git a/static/code-examples/mysql/db-setup.sql b/static/code-examples/mysql/db-setup.sql new file mode 100644 index 000000000..cc4340a9d --- /dev/null +++ b/static/code-examples/mysql/db-setup.sql @@ -0,0 +1,9 @@ +CREATE DATABASE IF NOT EXISTS otterize_example; + +USE otterize_example; + +CREATE TABLE IF NOT EXISTS example +( + file_name VARCHAR(255), + upload_time BIGINT +); \ No newline at end of file diff --git a/static/code-examples/mysql/mysqlserverconfig.yaml b/static/code-examples/mysql/mysqlserverconfig.yaml new file mode 100644 index 000000000..c4802f67c --- /dev/null +++ b/static/code-examples/mysql/mysqlserverconfig.yaml @@ -0,0 +1,9 @@ +apiVersion: k8s.otterize.com/v1alpha3 +kind: MySQLServerConfig +metadata: + name: mysql-tutorial-db +spec: + address: database # Your MySQL server address + credentials: + username: admin # Your MySQL server user + password: password # Your MySQL server password \ No newline at end of file diff --git a/static/code-examples/postgres/clientintents.yaml b/static/code-examples/postgres/clientintents.yaml new file mode 100644 index 000000000..04f0671e5 --- /dev/null +++ b/static/code-examples/postgres/clientintents.yaml @@ -0,0 +1,17 @@ +apiVersion: k8s.otterize.com/v1alpha3 +kind: ClientIntents +metadata: + name: client-intents-for-server + namespace: otterize-tutorial-postgres +spec: + service: + name: server + calls: + - name: postgres-tutorial-db # Same name as our PostgreSQLServerConfig metadata.name + type: database + databaseResources: + - databaseName: otterize-tutorial + table: public.example + operations: + - SELECT + - INSERT \ No newline at end of file diff --git a/static/code-examples/postgres/postgresqlserverconfig.yaml b/static/code-examples/postgres/postgresqlserverconfig.yaml new file mode 100644 index 000000000..c5852b78a --- /dev/null +++ b/static/code-examples/postgres/postgresqlserverconfig.yaml @@ -0,0 +1,9 @@ +apiVersion: k8s.otterize.com/v1alpha3 +kind: PostgreSQLServerConfig +metadata: + name: postgres-tutorial-db +spec: + address: database.otterize-tutorial-postgres.svc.cluster.local:5432 + credentials: + username: otterize-tutorial + password: jeffdog523 diff --git a/static/img/icons/mysql.svg b/static/img/icons/mysql.svg new file mode 100644 index 000000000..53371d09b --- /dev/null +++ b/static/img/icons/mysql.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/static/img/quick-tutorials/mysql/social.png b/static/img/quick-tutorials/mysql/social.png new file mode 100644 index 0000000000000000000000000000000000000000..017350f79d25aab707d7049210651d948cec4334 GIT binary patch literal 84277 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 Bi@pE= literal 0 HcmV?d00001