feature: configure kafka topic and user with terraform
This commit is contained in:
parent
27e15c9536
commit
6349ce5108
19
Makefile
Normal file
19
Makefile
Normal file
@ -0,0 +1,19 @@
|
||||
ACTION=apply
|
||||
|
||||
infrastructure-local:
|
||||
cd manifest && \
|
||||
terraform workspace select kind-cluster-dev && \
|
||||
terraform $(ACTION)
|
||||
|
||||
infrastructure-prod:
|
||||
cd manifest && \
|
||||
terraform workspace select default && \
|
||||
terraform $(ACTION)
|
||||
|
||||
topic-ssl:
|
||||
kubectl view-secret -n streaming kafka-user user.p12 > user.p12 && \
|
||||
kubectl view-secret -n streaming cluster-development-cluster-ca-cert ca.crt | kcat -b kafka.127.0.0.1.nip.io:443 -L -J -X 'security.protocol=ssl' -X "ssl.ca.location=/dev/stdin" -X "ssl.keystore.location=user.p12" -X "ssl.keystore.password=$$(kubectl view-secret -n streaming kafka-user user.password)" |jq && \
|
||||
rm -rf user.p12
|
||||
|
||||
topic-scram:
|
||||
kubectl view-secret -n streaming kafka-dev-listener-certificate ca.crt | kcat -b kafka.localdomain:9092 -L -J -X 'security.protocol=sasl_ssl' -X 'sasl.mechanism=SCRAM-SHA-512' -X 'sasl.username=kafka-user' -X "sasl.password=$(kubectl view-secret -n streaming kafka-user password)" -X "ssl.ca.location=/dev/stdin" | jq
|
22
manifest/.terraform.lock.hcl
generated
Normal file
22
manifest/.terraform.lock.hcl
generated
Normal file
@ -0,0 +1,22 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/kubernetes" {
|
||||
version = "2.20.0"
|
||||
constraints = ">= 2.20.0"
|
||||
hashes = [
|
||||
"h1:E7VAZorKe5oXn6h1nxP3ROwWNiQSrZlTawzix1sh8kM=",
|
||||
"zh:30bc224c94d2c90a7d44554f2ad30e3b62c7ffc6ddb7d4fd31b9acafb8b5ad77",
|
||||
"zh:3903cc9f0c3169a24265c4920d925ed7e37cbc4312237b29bd5b4ddcd6bdc535",
|
||||
"zh:512240f6dad36c0116a8717487a4ea12a6b4191028782c5b6749037892e2c6ed",
|
||||
"zh:57d5f77dcde7781803b465205aec3507780bfaa77031f5b893ae7cbebd4789b6",
|
||||
"zh:6274ab8c3b59634c344c337218223640e9d954996b9299587ca924e4dfb77aa4",
|
||||
"zh:6d838a25f3e3c696cf894f0adb44b41b461a2c76f914f1ae2c318ccbb1ec4e36",
|
||||
"zh:92f09e3e03311c4e24601b704d85de57677f49e29f42cc3479fafa68f5de300a",
|
||||
"zh:abb3cd606e485a46c076d6f60d37b5e5ecaa128c0150c8235627b484f2fac902",
|
||||
"zh:afc07f5c0d7ce2cc907600e4f87a1290203a36221951e19e5d3f1409a0502377",
|
||||
"zh:d9c01e4f12fabf5d6d9d11ceb409585b71c2abcad478496446de6ff18bbf2f5f",
|
||||
"zh:f40faba2269184b305f229503945400ed6eeafec7ac395c23f243bccab7b11b2",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
15
manifest/kafka/input.tf
Normal file
15
manifest/kafka/input.tf
Normal file
@ -0,0 +1,15 @@
|
||||
variable "namespace" {
|
||||
default = "default"
|
||||
type = string
|
||||
description = "namespace into which deploy kafka resource"
|
||||
}
|
||||
|
||||
variable "user-auth-type" {
|
||||
type = string
|
||||
description = "user authentication type : possible value scram-sha-512, tls, tls-external"
|
||||
}
|
||||
|
||||
variable "cluster-name" {
|
||||
type = string
|
||||
description = "kafka cluster name"
|
||||
}
|
44
manifest/kafka/topics.tf
Normal file
44
manifest/kafka/topics.tf
Normal file
@ -0,0 +1,44 @@
|
||||
resource "kubernetes_manifest" "receiver_topic" {
|
||||
manifest = {
|
||||
"apiVersion" = "kafka.strimzi.io/v1beta2"
|
||||
"kind" = "KafkaTopic"
|
||||
"metadata" = {
|
||||
"labels" = {
|
||||
"strimzi.io/cluster" = var.cluster-name
|
||||
}
|
||||
"name" = "dev.receiver.json"
|
||||
"namespace" = var.namespace
|
||||
}
|
||||
"spec" = {
|
||||
"config" = {
|
||||
"retention.ms" = 5257000000
|
||||
"segment.bytes" = 1073741824
|
||||
}
|
||||
"partitions" = 12
|
||||
"replicas" = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_manifest" "emitter_topic" {
|
||||
manifest = {
|
||||
"apiVersion" = "kafka.strimzi.io/v1beta2"
|
||||
"kind" = "KafkaTopic"
|
||||
"metadata" = {
|
||||
"labels" = {
|
||||
"strimzi.io/cluster" = var.cluster-name
|
||||
}
|
||||
"name" = "dev.emitter.json"
|
||||
"namespace" = var.namespace
|
||||
}
|
||||
"spec" = {
|
||||
"config" = {
|
||||
# 2 months
|
||||
"retention.ms" = 5257000000
|
||||
"segment.bytes" = 1073741824
|
||||
}
|
||||
"partitions" = 12
|
||||
"replicas" = 1
|
||||
}
|
||||
}
|
||||
}
|
59
manifest/kafka/users.tf
Normal file
59
manifest/kafka/users.tf
Normal file
@ -0,0 +1,59 @@
|
||||
resource "kubernetes_manifest" "kafka_user" {
|
||||
manifest = {
|
||||
"apiVersion" = "kafka.strimzi.io/v1beta2"
|
||||
"kind" = "KafkaUser"
|
||||
"metadata" = {
|
||||
"labels" = {
|
||||
"strimzi.io/cluster" = var.cluster-name
|
||||
}
|
||||
"name" = "kafka-user"
|
||||
"namespace" = var.namespace
|
||||
}
|
||||
"spec" = {
|
||||
"authentication" = {
|
||||
"type" = var.user-auth-type
|
||||
}
|
||||
"authorization" = {
|
||||
"acls" = [
|
||||
{
|
||||
"host" = "*"
|
||||
"operations" = [
|
||||
"Describe",
|
||||
"Write"
|
||||
]
|
||||
"resource" = {
|
||||
"name" = "dev.emitter."
|
||||
"type" = "topic"
|
||||
"patternType" = "prefix"
|
||||
}
|
||||
},
|
||||
{
|
||||
"host" = "*"
|
||||
"operations" = [
|
||||
"Describe",
|
||||
"Read"
|
||||
]
|
||||
"resource" = {
|
||||
"name" = "dev.receiver."
|
||||
"type" = "topic"
|
||||
"patternType" = "prefix"
|
||||
}
|
||||
},
|
||||
{
|
||||
"host" = "*"
|
||||
"operations" = [
|
||||
"Describe",
|
||||
"Read"
|
||||
]
|
||||
"resource" = {
|
||||
"type" = "group"
|
||||
"name" = "some-consumer"
|
||||
"patternType" = "literal"
|
||||
}
|
||||
}
|
||||
]
|
||||
"type" = "simple"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
50
manifest/main.tf
Normal file
50
manifest/main.tf
Normal file
@ -0,0 +1,50 @@
|
||||
terraform {
|
||||
required_version = ">= 1.0.4, < 2.0.0"
|
||||
|
||||
required_providers {
|
||||
kubernetes = {
|
||||
source = "hashicorp/kubernetes"
|
||||
version = ">= 2.20.0"
|
||||
}
|
||||
}
|
||||
|
||||
backend "s3" {
|
||||
endpoint = "http://s3.localdomain"
|
||||
key = "projects/go-kafka.tfstate"
|
||||
bucket = "terraform"
|
||||
region = "FR"
|
||||
skip_credentials_validation = true
|
||||
skip_region_validation = true
|
||||
skip_metadata_api_check = true
|
||||
shared_credentials_file = "~/.aws/credentials"
|
||||
force_path_style = true
|
||||
}
|
||||
}
|
||||
|
||||
provider "kubernetes" {
|
||||
config_paths = [
|
||||
"~/.kube/1-kind.kubeconfig",
|
||||
"~/.kube/config.kubeconfig"
|
||||
]
|
||||
|
||||
config_context = terraform.workspace == "default" ? "antoine@kubernetes" : terraform.workspace
|
||||
}
|
||||
|
||||
data "kubernetes_namespace_v1" "streaming_namespace" {
|
||||
metadata {
|
||||
name = "streaming"
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_namespace_v1" "application_namespace" {
|
||||
metadata {
|
||||
name = "some-application"
|
||||
}
|
||||
}
|
||||
|
||||
module "kafka" {
|
||||
source = "./kafka"
|
||||
namespace = data.kubernetes_namespace_v1.streaming_namespace.metadata.0.name
|
||||
user-auth-type = terraform.workspace == "default" ? "scram-sha-512" : "tls"
|
||||
cluster-name = terraform.workspace == "default" ? "dev" : "cluster-development"
|
||||
}
|
Loading…
Reference in New Issue
Block a user