Skip to content

Commit 31774cf

Browse files
authored
feat(bugs): move service behind load balancers (#393)
* feat(bugs): move service behind load balancers * Update pillar/base/firewall/bugs.sls * fix(bugs): update misplaced role * fix(bugs): add missing settings * fix(bugs): split services into their own sections * chore(bugs): template out the trackers instead * feat(bugs): add template for smtp * chore(bugs): remove dupes and move consul configs * feat(bugs): add listens for smtp * fix: make unique the certs * feat: add unique ports per service for consul * feat: add unique ports per service for consul * fix: update variable * fix: all services use bugs cert * feat: utilize tls in bind * fix: import missing pillar data * fix: remove resurrected code after rebase * feat: add unique consul service configs * feat: open up ports for each service * fix: do not loop * chore: saltify method of getting bugs pillar data * fix: use proper iptables syntax * chore: rename service, move into existing loop, remove smtps * chore: move into correct area * fix: remove missed port definitions
1 parent 7a73575 commit 31774cf

File tree

10 files changed

+164
-7
lines changed

10 files changed

+164
-7
lines changed

pillar/base/bugs.sls

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ bugs:
88
cpython:
99
source: https://github.com/psf/bpo-tracker-cpython.git
1010
server_name: bugs.python.org
11+
port: 9000
1112
workers: 16
1213
config:
1314
tracker: cpython
@@ -37,6 +38,7 @@ bugs:
3738
jython:
3839
source: https://github.com/psf/bpo-tracker-jython.git
3940
server_name: bugs.jython.org
41+
port: 9001
4042
config:
4143
tracker: jython
4244
main__database: /srv/roundup/data/jython
@@ -61,6 +63,7 @@ bugs:
6163
roundup:
6264
source: https://github.com/psf/bpo-tracker-roundup.git
6365
server_name: issues.roundup-tracker.org
66+
port: 9002
6467
config:
6568
tracker: roundup
6669
main__database: /srv/roundup/data/roundup

pillar/base/firewall/bugs.sls

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
{% include "networking.sls" %}
2+
13
firewall:
24
http:
35
port: 80
46
https:
57
port: 443
68
smtp:
79
port: 25
8-
smtps:
9-
port: 587
10-
submission:
11-
port: 465
10+
frontend-bugs:
11+
port: 9000:9002
12+
source: *psf_internal_network

pillar/base/haproxy.sls

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ haproxy:
6767
verify_host: planet.psf.io
6868
check: "HEAD / HTTP/1.1\\r\\nHost:\\ planet.psf.io"
6969

70+
{% for tracker, config in salt["pillar.get"]("bugs:trackers", {}).items() %}
71+
roundup-{{ tracker }}:
72+
domains:
73+
- {{ config['server_name'] }}
74+
verify_host: bugs.psf.io
75+
check: "HEAD / HTTP/1.1\\r\\nHost:\\ {{ config['server_name'] }}"
76+
{% endfor %}
77+
7078
moin:
7179
domains:
7280
- wiki.python.org
@@ -155,3 +163,13 @@ haproxy:
155163
extra:
156164
- timeout client 86400
157165
- timeout server 86400
166+
167+
{# We can extend this for smtps/submission later #}
168+
{% for (port, service, ssl) in [(25, "smtp", False)] %}
169+
roundup-{{ service }}:
170+
bind: :{{ port }} {% if ssl %} ssl crt /etc/ssl/private/bugs.python.org.pem {% endif %}
171+
service: roundup-{{ service }}
172+
extra:
173+
- timeout client 30m
174+
- timeout server 30m
175+
{% endfor %}

pillar/base/tls.sls

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ tls:
4242
roles:
4343
- planet
4444

45+
bugs.psf.io:
46+
roles:
47+
- bugs
48+
4549
postgresql.psf.io:
4650
roles:
4751
- postgresql

pillar/dev/secrets/tls/certs/loadbalancer.sls

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,55 @@ tls:
417417
Pe93No9Ze0Jou4GsXmP2E1YY0i3jkCigmuVTQSrl85uxxHfHWNgr9OwN8ASoF9dp
418418
ogsOBi74M0k7Ihp96JK6lUXTY+WnlJ3C9FZdByeXq6O4HLhgq5jug7E=
419419
-----END CERTIFICATE-----
420+
421+
bugs.python.org: |
422+
-----BEGIN PRIVATE KEY-----
423+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCSNloTX8Ut5t4v
424+
M8MDD0gzrRWKFwcqDbvMa/JkK89hfoSfAnZwIHtZl+PTHCOXqU4WEMvYwSIcqVlD
425+
bOfTDLklwFvMxwzj4/TJbXrHtPf6wFRQa2KUrewy+KcpZBERJcEhJ1PwRHe4bY+n
426+
t4L+gDcRVoLmZXUpxasMeBHXD8ZqY9v7BXS2Z4qNnKu7/nABK7yR0DF/epYXxNPf
427+
aGL8qEfXsWhc3278MCsipokYFOOVhVxPyJ0xny065L1lX51GChr6kSMNAdV6/Zju
428+
vDMmFJp4AbZQ8ta/QdppGEe/cFDGg4VNpinlZ8vQJ01hTON9TxlJqG0oFDmplGCU
429+
a+SFiLQLAgMBAAECggEANYChDnTdlPHlvNUOl7iIXayI9Lp/eyKCZYfcr04euVjQ
430+
E9WVXGtuZ7b+fZpO5ejks4ta5Iqrvlwz10nrPN3rhEZy8SinbV7VjL28j4aHtaCa
431+
WcEp1ikchPxbQvikjCdKGCUpgIK1Ym3pAuDSlOl6/SOwi7l1mZ8E+++V66IQo44w
432+
cP+64sm4VIS3kVNhNxB619gXcmldo7N5fC7eF8K8wNnCXSlJA8BqrW/OAAUSl4Lp
433+
rn7BkxSdcISejA/n9QoGkKOd6XZ7vzMV4hseFzisn9xGkRWx6zdZsfcuzeZ10p7E
434+
pxNCA1g7l1xxYTUIDNBmMImtUsbIH0INXiu2MCXJbQKBgQDC9fb0ZJCJN8hpqb3+
435+
Zw1FxjNAs8eqTwaohc7H3n+DSeBLZi63wKe8gO1sPcvwFx2/8U6oQS9lo2xOaDuu
436+
Fv4S57jIOoTIxt2Ax/eVTlGh/3EHXqACUQn/qXCdHLtO0sTnnr3WpA15Q8JrjTHU
437+
RePRI2xqCTkC4e4GWBKN6fTwtwKBgQC//TbPlf949KI6scnh8foFXEepPelfhUl2
438+
zGj78stXSOkHJ9oYWNYVBH4lL7GrsYryr+6Ndr8Di7o45FD/iHBSMWfJluRDUH42
439+
yU3Ro54ECBBChI+9n+QUL9gUZBBfJgBDfiKHdbMrmD+IkD8QKFNHf7UdcgB/RG/+
440+
nFjzP08bTQKBgAVPX7eOWaVzIIFIP0WDlwf0ewbjHqgT2PGUG2q0M7LmuzYyhUk5
441+
9RecR1swX7KdXpEQyHyqsdjJ17RXAHEgbTEkoJLLjTxOtk/AooytgmmwJGr399G4
442+
VVZiTg/pbWybLwPD/hWviDJqVwxI3zeR47+ZgGVu9N+QOcRwd6jn22UHAoGAdSTX
443+
sMnhW7hI1G9us0KmP2cTAp0YLIRzUt1eoXx/vf5q0UbruDdcSO642Y/EZPKryXC3
444+
qfFuk4dKVTRah9CEWGJ05XgAR2Jx4JPru6KN4//Xi/6+hgFtdTPMMITtyGCzgHsS
445+
Ln0OmecHvRfmosE4L0QpCpJo4z6q5zwWujVC23ECgYAi1r+27xBjVtSvsd7xkBfY
446+
R2HpqcSHaMedQZ2DY/LU6OH5O1RxQsgeSYyiiHMjN9ij3IUv+JHcxaotcSUQIWEa
447+
YJmAMhl5ZEfYzpMJ9PUQymN59AAGuTr2PYjc9fhZm5/EgpxC2cl/AR2nS3U19dwf
448+
N5zICLLKa7f4hPvAFf33Lg==
449+
-----END PRIVATE KEY-----
450+
-----BEGIN CERTIFICATE-----
451+
MIIDtTCCAp2gAwIBAgIUHTES3WH58IHxo9rMUzj/DeytPc8wDQYJKoZIhvcNAQEL
452+
BQAwajELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk9SMRIwEAYDVQQHDAlCZWF2ZXJ0
453+
b24xIzAhBgNVBAoMGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMRUwEwYDVQQD
454+
DAwqLnB5dGhvbi5vcmcwHhcNMjQwNzE3MTgyNTAxWhcNMzQwNzE1MTgyNTAxWjBq
455+
MQswCQYDVQQGEwJVUzELMAkGA1UECAwCT1IxEjAQBgNVBAcMCUJlYXZlcnRvbjEj
456+
MCEGA1UECgwaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24xFTATBgNVBAMMDCou
457+
cHl0aG9uLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJI2WhNf
458+
xS3m3i8zwwMPSDOtFYoXByoNu8xr8mQrz2F+hJ8CdnAge1mX49McI5epThYQy9jB
459+
IhypWUNs59MMuSXAW8zHDOPj9Mltese09/rAVFBrYpSt7DL4pylkERElwSEnU/BE
460+
d7htj6e3gv6ANxFWguZldSnFqwx4EdcPxmpj2/sFdLZnio2cq7v+cAErvJHQMX96
461+
lhfE099oYvyoR9exaFzfbvwwKyKmiRgU45WFXE/InTGfLTrkvWVfnUYKGvqRIw0B
462+
1Xr9mO68MyYUmngBtlDy1r9B2mkYR79wUMaDhU2mKeVny9AnTWFM431PGUmobSgU
463+
OamUYJRr5IWItAsCAwEAAaNTMFEwHQYDVR0OBBYEFPJrXEC964Djv1KtiYGjRFpD
464+
s8RvMB8GA1UdIwQYMBaAFPJrXEC964Djv1KtiYGjRFpDs8RvMA8GA1UdEwEB/wQF
465+
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGlJ+N5txBsBekRMkl2pGxUecihJWLXM
466+
pwnXuhKswrsCpLiJlWijTWVBULfVn71rEfnMFNgdVn4i1TddgyK4cViHWZPBYcGd
467+
SYbQK40xmLuIAJKM8uARdm99AmavKCH+ha6jFY8fZoU0+m51hOztXfGTIkLpLr2r
468+
+0ydepkbAWqNH6NYNpUQKFxSlyTYvwaHUh0YzXMxgOj+foJCygyVnB/E7Fja92Ho
469+
Pe93No9Ze0Jou4GsXmP2E1YY0i3jkCigmuVTQSrl85uxxHfHWNgr9OwN8ASoF9dp
470+
ogsOBi74M0k7Ihp96JK6lUXTY+WnlJ3C9FZdByeXq6O4HLhgq5jug7E=
471+
-----END CERTIFICATE-----

pillar/dev/top.sls

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ base:
1616
'bugs':
1717
- match: nodegroup
1818
- bugs
19+
- firewall.bugs
1920

2021
'cdn-logs':
2122
- match: nodegroup
@@ -55,6 +56,7 @@ base:
5556
- firewall.loadbalancer
5657
- secrets.fastly
5758
- secrets.tls.certs.loadbalancer
59+
- bugs
5860

5961
'mail':
6062
- match: nodegroup

pillar/prod/top.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ base:
8080
- ocsp
8181
- secrets.fastly
8282
- secrets.tls.certs.loadbalancer
83+
- bugs
8384

8485
'mail':
8586
- match: nodegroup

salt/bugs/config/nginx.conf.jinja

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,49 @@ server {
7777
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
7878
}
7979
}
80+
81+
server {
82+
listen {{ port }} ssl;
83+
server_name {{ server_name }};
84+
include mime.types;
85+
86+
ssl_certificate /etc/ssl/private/bugs.psf.io.pem;
87+
ssl_certificate_key /etc/ssl/private/bugs.psf.io.pem;
88+
89+
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
90+
add_header X-Frame-Options "sameorigin";
91+
add_header X-Xss-Protection "1; mode=block";
92+
add_header X-Content-Type-Options "nosniff";
93+
add_header X-Permitted-Cross-Domain-Policies "none";
94+
95+
error_log /var/log/nginx/roundup-{{ tracker }}.error.log;
96+
access_log /var/log/nginx/roundup-{{ tracker }}.access.log timed_combined_{{ tracker }};
97+
98+
root /srv/roundup/trackers/{{ tracker }}/;
99+
100+
include conf.d/tracker-extras/{{ tracker }}*.conf;
101+
102+
gzip on;
103+
gzip_http_version 1.1;
104+
gzip_proxied any;
105+
gzip_min_length 500;
106+
gzip_comp_level 6; # default comp_level is 1
107+
gzip_disable msie6;
108+
gzip_types text/plain text/css
109+
text/xml application/xml
110+
text/javascript application/javascript
111+
text/json application/json;
112+
113+
location /@@file/ {
114+
rewrite ^/@@file/(.*) /html/$1 break;
115+
expires 1h;
116+
}
117+
118+
location / {
119+
limit_req zone=limit-{{ tracker }} burst=5 nodelay;
120+
proxy_pass http://tracker-{{ tracker }}/;
121+
proxy_set_header Host $host;
122+
proxy_set_header X-Real-IP $remote_addr;
123+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
124+
}
125+
}

salt/bugs/init.sls

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,22 @@ postfix:
210210
- file: /etc/postfix/virtual
211211
- file: /etc/postfix/reject_recipients
212212
213+
{# We can extend this for smtps/submission later #}
214+
{% for (port, service) in [(25, "smtp")] %}
215+
/etc/consul.d/roundup-{{ service }}.json:
216+
file.managed:
217+
- source: salt://consul/etc/service.jinja
218+
- template: jinja
219+
- context:
220+
name: roundup-{{ service }}
221+
port: {{ port }}
222+
- user: root
223+
- group: root
224+
- mode: "0644"
225+
- require:
226+
- pkg: consul-pkgs
227+
{% endfor %}
228+
213229
{% for tracker, config in pillar["bugs"]["trackers"].items() %}
214230
tracker-{{ tracker }}-database:
215231
postgres_database.present:
@@ -312,9 +328,23 @@ tracker-{{ tracker }}-nginx-config:
312328
- context:
313329
tracker: {{ tracker }}
314330
server_name: {{ config.get('server_name') }}
331+
port: {{ config.get('port') }}
315332
- require:
316333
- file: /etc/nginx/sites.d/
317334
335+
/etc/consul.d/roundup-{{ tracker }}.json:
336+
file.managed:
337+
- source: salt://consul/etc/service.jinja
338+
- template: jinja
339+
- context:
340+
name: roundup-{{ tracker }}
341+
port: {{ config.get('port') }}
342+
- user: root
343+
- group: root
344+
- mode: "0644"
345+
- require:
346+
- pkg: consul-pkgs
347+
318348
roundup-{{ tracker }}-backup:
319349
file.directory:
320350
- name: /backup/roundup/{{ tracker }}

salt/haproxy/config/haproxy.cfg.jinja

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ listen tls:
8686
bind :20006 ssl alpn h2,http/1.1 crt speed.pypy.org.pem
8787
bind :20007 ssl alpn h2,http/1.1 crt www.pycon.org.pem
8888
bind :20008 ssl alpn h2,http/1.1 crt jython.org.pem
89-
bind 0.0.0.0:443 ssl alpn h2,http/1.1 crt star.python.org.pem crt star.pypa.io.pem crt star.pyfound.org.pem crt speed.pypy.org.pem crt www.pycon.org.pem crt jython.org.pem crt salt-public.psf.io.pem crt planetpython.org.pem
90-
bind :::443 ssl alpn h2,http/1.1 crt star.python.org.pem crt star.pypa.io.pem crt star.pyfound.org.pem crt speed.pypy.org.pem crt www.pycon.org.pem crt jython.org.pem crt salt-public.psf.io.pem crt planetpython.org.pem
91-
bind :20010 ssl alpn h2,http/1.1 crt star.python.org.pem crt star.pypa.io.pem crt star.pyfound.org.pem crt speed.pypy.org.pem crt www.pycon.org.pem crt jython.org.pem crt salt-public.psf.io.pem crt planetpython.org.pem
89+
bind 0.0.0.0:443 ssl alpn h2,http/1.1 crt star.python.org.pem crt star.pypa.io.pem crt star.pyfound.org.pem crt speed.pypy.org.pem crt www.pycon.org.pem crt jython.org.pem crt salt-public.psf.io.pem crt planetpython.org.pem crt bugs.python.org.pem
90+
bind :::443 ssl alpn h2,http/1.1 crt star.python.org.pem crt star.pypa.io.pem crt star.pyfound.org.pem crt speed.pypy.org.pem crt www.pycon.org.pem crt jython.org.pem crt salt-public.psf.io.pem crt planetpython.org.pem crt bugs.python.org.pem
91+
bind :20010 ssl alpn h2,http/1.1 crt star.python.org.pem crt star.pypa.io.pem crt star.pyfound.org.pem crt speed.pypy.org.pem crt www.pycon.org.pem crt jython.org.pem crt salt-public.psf.io.pem crt planetpython.org.pem crt bugs.python.org.pem
9292

9393
mode http
9494

0 commit comments

Comments
 (0)