KubraGen Builder: Traefik 2
Project description
KubraGen Builder: Traefik 2
kg_traefik2 is a builder for KubraGen that deploys a Traefik 2 server in Kubernetes.
KubraGen is a Kubernetes YAML generator library that makes it possible to generate configurations using the full power of the Python programming language.
- Website: https://github.com/RangelReale/kg_traefik2
- Repository: https://github.com/RangelReale/kg_traefik2.git
- Documentation: https://kg_traefik2.readthedocs.org/
- PyPI: https://pypi.python.org/pypi/kg_traefik2
Example
from kubragen import KubraGen
from kubragen.consts import PROVIDER_GOOGLE, PROVIDERSVC_GOOGLE_GKE
from kubragen.object import Object
from kubragen.option import OptionRoot
from kubragen.options import Options
from kubragen.output import OutputProject, OD_FileTemplate, OutputFile_ShellScript, OutputFile_Kubernetes, \
OutputDriver_Print
from kubragen.provider import Provider
from kg_traefik2 import Traefik2Builder, Traefik2Options, Traefik2ConfigFile, Traefik2OptionsPort
kg = KubraGen(provider=Provider(PROVIDER_GOOGLE, PROVIDERSVC_GOOGLE_GKE), options=Options({
'namespaces': {
'mon': 'app-monitoring',
},
}))
out = OutputProject(kg)
shell_script = OutputFile_ShellScript('create_gke.sh')
out.append(shell_script)
shell_script.append('set -e')
#
# OUTPUTFILE: app-namespace.yaml
#
file = OutputFile_Kubernetes('app-namespace.yaml')
file.append([
Object({
'apiVersion': 'v1',
'kind': 'Namespace',
'metadata': {
'name': 'app-monitoring',
},
}, name='ns-monitoring', source='app', instance='app')
])
out.append(file)
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))
shell_script.append(f'kubectl config set-context --current --namespace=app-monitoring')
#
# SETUP: traefik2
#
traefik2_config_file = Traefik2ConfigFile()
traefik2_config = Traefik2Builder(kubragen=kg, options=Traefik2Options({
'namespace': OptionRoot('namespaces.mon'),
'basename': 'mytraefik2',
'config': {
'traefik_config': traefik2_config_file,
'traefik_args': [
'--entrypoints.web.Address=:80',
'--entryPoints.metrics.address=:9090',
'--metrics.prometheus=true',
'--metrics.prometheus.entryPoint=metrics',
],
'ports': [
Traefik2OptionsPort(name='web', port_container=80, port_service=80),
Traefik2OptionsPort(name='metrics', port_container=9090, in_service=False),
],
},
'kubernetes': {
'resources': {
'deployment': {
'requests': {
'cpu': '150m',
'memory': '300Mi'
},
'limits': {
'cpu': '300m',
'memory': '450Mi'
},
},
},
}
}))
traefik2_config.ensure_build_names(traefik2_config.BUILD_CRD, traefik2_config.BUILD_ACCESSCONTROL,
traefik2_config.BUILD_CONFIG, traefik2_config.BUILD_SERVICE)
#
# OUTPUTFILE: traefik2-crd.yaml
#
file = OutputFile_Kubernetes('traefik2-crd.yaml')
out.append(file)
file.append(traefik2_config.build(traefik2_config.BUILD_CRD))
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))
#
# OUTPUTFILE: traefik2-config.yaml
#
file = OutputFile_Kubernetes('traefik2-config.yaml')
out.append(file)
file.append(traefik2_config.build(traefik2_config.BUILD_ACCESSCONTROL, traefik2_config.BUILD_CONFIG))
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))
#
# OUTPUTFILE: traefik2.yaml
#
file = OutputFile_Kubernetes('traefik2.yaml')
out.append(file)
file.append(traefik2_config.build(traefik2_config.BUILD_SERVICE))
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))
#
# Write files
#
out.output(OutputDriver_Print())
# out.output(OutputDriver_Directory('/tmp/build-gke'))
Output:
****** BEGIN FILE: 001-app-namespace.yaml ********
apiVersion: v1
kind: Namespace
metadata:
name: app-monitoring
****** END FILE: 001-app-namespace.yaml ********
****** BEGIN FILE: 002-traefik2-crd.yaml ********
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: ingressroutes.traefik.containo.us
spec:
group: traefik.containo.us
version: v1alpha1
names:
kind: IngressRoute
plural: ingressroutes
singular: ingressroute
scope: Namespaced
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: middlewares.traefik.containo.us
spec:
<...more...>
****** END FILE: 002-traefik2-crd.yaml ********
****** BEGIN FILE: 003-traefik2-config.yaml ********
apiVersion: v1
kind: ServiceAccount
metadata:
name: mytraefik2
namespace: app-monitoring
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: mytraefik2
rules:
- apiGroups: ['']
resources: [services, endpoints, secrets]
verbs: [get, list, watch]
- apiGroups: [extensions, networking.k8s.io]
resources: [ingresses, ingressclasses]
verbs: [get, list, watch]
- apiGroups: [extensions]
resources: [ingresses/status]
verbs: [update]
- apiGroups: [traefik.containo.us]
resources: [middlewares, ingressroutes, traefikservices, ingressroutetcps, ingressrouteudps,
tlsoptions, tlsstores]
verbs: [get, list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: mytraefik2
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: mytraefik2
subjects:
- kind: ServiceAccount
name: mytraefik2
namespace: app-monitoring
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mytraefik2-config
namespace: app-monitoring
data:
prometheus.toml: |
[global]
checkNewVersion = false
sendAnonymousUsage = false
****** END FILE: 003-traefik2-config.yaml ********
****** BEGIN FILE: 004-traefik2.yaml ********
kind: Deployment
apiVersion: apps/v1
metadata:
name: mytraefik2
namespace: app-monitoring
labels:
app: mytraefik2
spec:
selector:
matchLabels:
app: mytraefik2
template:
metadata:
labels:
app: mytraefik2
spec:
serviceAccountName: mytraefik2
volumes:
- name: traefik2-config
configMap:
name: mytraefik2-config
containers:
- name: traefik
<...more...>
****** END FILE: 004-traefik2.yaml ********
****** BEGIN FILE: create_gke.sh ********
#!/bin/bash
set -e
kubectl apply -f 001-app-namespace.yaml
kubectl config set-context --current --namespace=app-monitoring
kubectl apply -f 002-traefik2-crd.yaml
kubectl apply -f 003-traefik2-config.yaml
kubectl apply -f 004-traefik2.yaml
****** END FILE: create_gke.sh ********
Credits
based on
Author
Rangel Reale (rangelspam@gmail.com)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
kg_traefik2-0.7.5.tar.gz
(10.9 kB
view details)
Built Distribution
File details
Details for the file kg_traefik2-0.7.5.tar.gz
.
File metadata
- Download URL: kg_traefik2-0.7.5.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b29b30f5a4a95752912d7f6b80c819e27369f7920ce8be0a0ced5f6a077e9e30 |
|
MD5 | 6f17fb9ef79648a8c36ea978f720b963 |
|
BLAKE2b-256 | 55e3129be5a9de2767bacc5bbe3c928af3ae89e122cf48394ae700d57f5c8da2 |
File details
Details for the file kg_traefik2-0.7.5-py3-none-any.whl
.
File metadata
- Download URL: kg_traefik2-0.7.5-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d0468f87911d99144b75952b63bf2d36d057dd27a94c2c2c723ef3c0b7d1589 |
|
MD5 | 5cd36d93e721e9bca9af522ddc067268 |
|
BLAKE2b-256 | df1056e674e48ea010dcd4cd4b51d8034215d21e12edb095f1daf8bd62c9932c |