Skip to content

Commit 928e702

Browse files
authored
Added MTLS support (#37)
* added mtls support that can be enabled with ENABLE_MTLS environment variable Signed-off-by: Saurav Suresh <[email protected]>
1 parent eaa68e3 commit 928e702

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# See https://pre-commit.com/hooks.html for more hooks
33
repos:
44
- repo: https://gitlab.com/pycqa/flake8
5-
rev: 'master' # Use the sha / tag you want to point at
5+
rev: '3.9.2' # Use the sha / tag you want to point at
66
hooks:
77
- id: flake8
88
args: []

requirements-dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ pytest-mock
77
pytest_catchlog
88
requests-mock
99
python-coveralls
10+
flask
11+
Werkzeug

requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ pytest-cov
1212
pytest-mock
1313
requests-mock
1414
alchemy-logging>=1.0.3
15+
flask
16+
Werkzeug

trawler.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@
1212
from manager_net import ManagerNet
1313
from analytics_net import AnalyticsNet
1414
from watch_pods import Watcher
15-
from prometheus_client import start_http_server
15+
from prometheus_client import start_http_server, Gauge, Counter, make_wsgi_app
1616
import metrics_graphite
17-
from prometheus_client import Gauge, Counter
17+
from flask import Flask
18+
from werkzeug.middleware.dispatcher import DispatcherMiddleware
19+
import ssl
1820

1921

2022
logger = alog.use_channel("trawler")
23+
app = Flask(__name__)
24+
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
25+
'/metrics': make_wsgi_app()
26+
})
2127

2228

2329
class Trawler(object):
@@ -31,12 +37,15 @@ class Trawler(object):
3137
# Default to True, but detected unless overridden in config
3238
use_kubeconfig = True
3339
# Default path for secrets in container build - override with envvar SECRETS
40+
mtls = False
41+
# mtls defaults to false. can be set via the ENABLE_MTLS environment variable
3442
secrets_path = '/app/secrets'
3543
graphite = None
3644
gauges = {}
3745

38-
def __init__(self, config_file=None):
46+
def __init__(self, config_file=None, ):
3947
self.secrets_path = os.getenv('SECRETS', self.secrets_path)
48+
self.mtls = os.getenv("ENABLE_MTLS", 'False').lower() in ('true', '1', 't')
4049
if config_file:
4150
self.load_config(config_file)
4251
if 'logging' in self.config:
@@ -49,9 +58,19 @@ def __init__(self, config_file=None):
4958
alog.configure(default_level='info', formatter='json')
5059
self.logger = alog.use_channel("trawler")
5160
if self.config['prometheus']['enabled']:
52-
port = self.config['prometheus'].get('port')
53-
logger.info('Starting prometheus http port at http://0.0.0.0:{}'.format(port))
54-
start_http_server(port)
61+
if self.mtls:
62+
cert_path = os.getenv('CERT_PATH')
63+
port = self.config['prometheus'].get('port')
64+
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
65+
context.verify_mode = ssl.CERT_REQUIRED
66+
context.load_verify_locations(cert_path + 'ca.crt')
67+
context.load_cert_chain(cert_path + 'tls.crt', cert_path + 'tls.key')
68+
logger.info('Starting flask https port at http://0.0.0.0:{}'.format(port))
69+
app.run('0.0.0.0', port, ssl_context=context)
70+
else:
71+
port = self.config['prometheus'].get('port')
72+
logger.info('Starting prometheus http port at http://0.0.0.0:{}'.format(port))
73+
start_http_server(port)
5574
if self.config['graphite']['enabled']:
5675
self.graphite = metrics_graphite.instance(self.config['graphite'])
5776

@@ -203,7 +222,7 @@ def trawl_metrics(self):
203222
help="Specifies an alternative config file",
204223
default=None,
205224
type=click.Path())
206-
def cli(config=None):
225+
def cli(config=None, ):
207226
""" run main trawler application """
208227
trawler = Trawler(config)
209228
trawler.trawl_metrics()

0 commit comments

Comments
 (0)