Skip to content

Commit efac0d6

Browse files
committed
PMM-14184 enable kerberos for default setup
1 parent 73abc62 commit efac0d6

8 files changed

Lines changed: 265 additions & 2 deletions

File tree

pmm_psmdb-pbm_setup/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ RUN if [[ "$PMM_CLIENT_VERSION" == http* ]]; then \
8484
curl -Lf -o /tmp/mgodatagen.tar.gz https://github.com/feliixx/mgodatagen/releases/download/v0.11.2/mgodatagen_0.11.2_Linux_x86_64.tar.gz && \
8585
tar -xf /tmp/mgodatagen.tar.gz -C /usr/bin && \
8686
dnf clean all; \
87-
rm -rf /var/cache/dnf /var/cache/dnf /data/db && mkdir -p /data/db;
87+
rm -rf /var/cache/dnf /var/cache/dnf /data/db && mkdir -p /data/db; \
88+
dnf -y install krb5-workstation
8889

8990
COPY conf/sysconfig/mongod /etc/sysconfig/
9091
COPY keyfile /etc/keyfile
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/bash
2+
3+
# Configure Kerberos for replicaset setup
4+
set -e
5+
6+
# Create krb5.conf
7+
cat > /etc/krb5.conf << EOL
8+
[libdefaults]
9+
default_realm = PERCONATEST.COM
10+
forwardable = true
11+
dns_lookup_realm = false
12+
dns_lookup_kdc = false
13+
ignore_acceptor_hostname = true
14+
rdns = false
15+
[realms]
16+
PERCONATEST.COM = {
17+
kdc_ports = 88
18+
kdc = kerberos
19+
admin_server = kerberos
20+
}
21+
[domain_realm]
22+
.perconatest.com = PERCONATEST.COM
23+
perconatest.com = PERCONATEST.COM
24+
kerberos = PERCONATEST.COM
25+
EOL
26+
27+
# Initialize Kerberos database only if it doesn't exist
28+
if [ ! -f /var/lib/krb5kdc/principal ]; then
29+
kdb5_util -P password create -s
30+
fi
31+
# Add principals (ignore if they already exist)
32+
kadmin.local -q "addprinc -pw password root/admin" 2>/dev/null || true
33+
kadmin.local -q "addprinc -pw mongodb mongodb/rs101" 2>/dev/null || true
34+
kadmin.local -q "addprinc -pw mongodb mongodb/rs102" 2>/dev/null || true
35+
kadmin.local -q "addprinc -pw mongodb mongodb/rs103" 2>/dev/null || true
36+
kadmin.local -q "addprinc -pw mongodb mongodb/127.0.0.1" 2>/dev/null || true
37+
kadmin.local -q "addprinc -pw password1 pmm-test" 2>/dev/null || true
38+
39+
# Create extra replicaset member principals if needed
40+
if [ "${COMPOSE_PROFILES}" = "extra" ]; then
41+
kadmin.local -q "addprinc -pw mongodb mongodb/rs201" 2>/dev/null || true
42+
kadmin.local -q "addprinc -pw mongodb mongodb/rs202" 2>/dev/null || true
43+
kadmin.local -q "addprinc -pw mongodb mongodb/rs203" 2>/dev/null || true
44+
fi
45+
46+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/rs101@PERCONATEST.COM"
47+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/rs102@PERCONATEST.COM"
48+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/rs103@PERCONATEST.COM"
49+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/127.0.0.1@PERCONATEST.COM"
50+
51+
if [ "${COMPOSE_PROFILES}" = "extra" ]; then
52+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/rs201@PERCONATEST.COM"
53+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/rs202@PERCONATEST.COM"
54+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab mongodb/rs203@PERCONATEST.COM"
55+
fi
56+
57+
# Add pmm-test principal to keytab
58+
kadmin.local -q "ktadd -k /keytabs/mongodb.keytab pmm-test@PERCONATEST.COM"
59+
60+
# Start KDC and keep it running
61+
krb5kdc -n &
62+
kadmind &
63+
tail -f /dev/null

pmm_psmdb-pbm_setup/conf/krb/krb5.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
PERCONATEST.COM = {
1010
kdc_ports = 88
1111
kdc = kerberos
12+
admin_server = kerberos
1213
}
1314
[domain_realm]
1415
.perconatest.com = PERCONATEST.COM

pmm_psmdb-pbm_setup/conf/mongod-rs/mongod.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ operationProfiling:
2222

2323
security:
2424
keyFile: /etc/keyfile
25+
authorization: enabled
26+
27+
setParameter:
28+
authenticationMechanisms: SCRAM-SHA-1,GSSAPI

pmm_psmdb-pbm_setup/docker-compose-rs.yaml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ services:
1818
rs101:
1919
depends_on:
2020
- build_member
21+
- kerberos
2122
image: replica_member/local
2223
profiles: ["classic", "extra"]
2324
ports:
@@ -34,6 +35,7 @@ services:
3435
- ./conf/datagen:/etc/datagen:ro
3536
- /sys/fs/cgroup:/sys/fs/cgroup:rw
3637
- /tmp/backup_data:/tmp/backup_data:rw
38+
- keytabs:/keytabs
3739
privileged: true
3840
cgroup: host
3941
environment:
@@ -44,10 +46,17 @@ services:
4446
PMM_AGENT_SERVER_INSECURE_TLS: 1
4547
container_name: rs101
4648
hostname: rs101
49+
entrypoint:
50+
- bash
51+
- -c
52+
- |
53+
chown -R mongod:mongod /keytabs
54+
exec /usr/sbin/init
4755
4856
rs102:
4957
depends_on:
5058
- build_member
59+
- kerberos
5160
image: replica_member/local
5261
profiles: ["classic", "extra"]
5362
networks:
@@ -61,6 +70,7 @@ services:
6170
- ./conf/mongod-rs:/etc/mongod
6271
- /sys/fs/cgroup:/sys/fs/cgroup:rw
6372
- /tmp/backup_data:/tmp/backup_data:rw
73+
- keytabs:/keytabs
6474
privileged: true
6575
cgroup: host
6676
environment:
@@ -71,10 +81,17 @@ services:
7181
PMM_AGENT_SERVER_INSECURE_TLS: 1
7282
container_name: rs102
7383
hostname: rs102
84+
entrypoint:
85+
- bash
86+
- -c
87+
- |
88+
chown -R mongod:mongod /keytabs
89+
exec /usr/sbin/init
7490
7591
rs103:
7692
depends_on:
7793
- build_member
94+
- kerberos
7895
image: replica_member/local
7996
profiles: ["classic", "extra"]
8097
networks:
@@ -88,6 +105,7 @@ services:
88105
- ./conf/mongod-rs:/etc/mongod
89106
- /sys/fs/cgroup:/sys/fs/cgroup:rw
90107
- /tmp/backup_data:/tmp/backup_data:rw
108+
- keytabs:/keytabs
91109
privileged: true
92110
cgroup: host
93111
environment:
@@ -98,10 +116,17 @@ services:
98116
PMM_AGENT_SERVER_INSECURE_TLS: 1
99117
container_name: rs103
100118
hostname: rs103
119+
entrypoint:
120+
- bash
121+
- -c
122+
- |
123+
chown -R mongod:mongod /keytabs
124+
exec /usr/sbin/init
101125
102126
rs201:
103127
depends_on:
104128
- build_member
129+
- kerberos
105130
image: replica_member/local
106131
profiles: ["extra"]
107132
ports:
@@ -117,6 +142,7 @@ services:
117142
- ./conf/mongod-rs:/etc/mongod
118143
- /sys/fs/cgroup:/sys/fs/cgroup:rw
119144
- /tmp/backup_data:/tmp/backup_data:rw
145+
- keytabs:/keytabs
120146
privileged: true
121147
cgroup: host
122148
environment:
@@ -127,10 +153,17 @@ services:
127153
PMM_AGENT_SERVER_INSECURE_TLS: 1
128154
container_name: rs201
129155
hostname: rs201
156+
entrypoint:
157+
- bash
158+
- -c
159+
- |
160+
chown -R mongod:mongod /keytabs
161+
exec /usr/sbin/init
130162
131163
rs202:
132164
depends_on:
133165
- build_member
166+
- kerberos
134167
image: replica_member/local
135168
profiles: ["extra"]
136169
networks:
@@ -144,6 +177,7 @@ services:
144177
- ./conf/mongod-rs:/etc/mongod
145178
- /sys/fs/cgroup:/sys/fs/cgroup:rw
146179
- /tmp/backup_data:/tmp/backup_data:rw
180+
- keytabs:/keytabs
147181
privileged: true
148182
cgroup: host
149183
environment:
@@ -154,10 +188,17 @@ services:
154188
PMM_AGENT_SERVER_INSECURE_TLS: 1
155189
container_name: rs202
156190
hostname: rs202
191+
entrypoint:
192+
- bash
193+
- -c
194+
- |
195+
chown -R mongod:mongod /keytabs
196+
exec /usr/sbin/init
157197
158198
rs203:
159199
depends_on:
160200
- build_member
201+
- kerberos
161202
image: replica_member/local
162203
profiles: ["extra"]
163204
networks:
@@ -171,6 +212,7 @@ services:
171212
- ./conf/mongod-rs:/etc/mongod
172213
- /sys/fs/cgroup:/sys/fs/cgroup:rw
173214
- /tmp/backup_data:/tmp/backup_data:rw
215+
- keytabs:/keytabs
174216
privileged: true
175217
cgroup: host
176218
environment:
@@ -181,6 +223,12 @@ services:
181223
PMM_AGENT_SERVER_INSECURE_TLS: 1
182224
container_name: rs203
183225
hostname: rs203
226+
entrypoint:
227+
- bash
228+
- -c
229+
- |
230+
chown -R mongod:mongod /keytabs
231+
exec /usr/sbin/init
184232
185233
minio:
186234
image: minio/minio
@@ -218,6 +266,30 @@ services:
218266
entrypoint: >
219267
/bin/sh -c " sleep 5; /usr/bin/mc alias set myminio http://minio:9000 minio1234 minio1234; /usr/bin/mc mb myminio/bcp; exit 0; "
220268
269+
kerberos:
270+
image: kerberos/local
271+
build:
272+
dockerfile: ../pmm_psmdb_diffauth_setup/Dockerfile-kerberos
273+
context: .
274+
container_name: kerberos
275+
hostname: kerberos
276+
profiles: ["classic", "extra"]
277+
networks:
278+
- pmm-qa
279+
- pmm-ui-tests1
280+
- qa-integration
281+
- pmm-ui-tests2
282+
- pmm-ui-tests3
283+
environment:
284+
- "KRB5_TRACE=/dev/stderr"
285+
volumes:
286+
- keytabs:/keytabs
287+
healthcheck:
288+
test: ["CMD", "kadmin.local", "-q", "listprincs"]
289+
interval: 2s
290+
timeout: 1s
291+
retries: 5
292+
221293
networks:
222294
qa-integration:
223295
external: true
@@ -233,3 +305,7 @@ networks:
233305
pmm-qa:
234306
name: pmm-qa
235307
external: true
308+
309+
volumes:
310+
keytabs:
311+
driver: local

pmm_psmdb-pbm_setup/start-rs-only.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@ if [ $mongo_setup_type == "pss" ]; then
2727
else
2828
bash -e ./configure-psa.sh
2929
fi
30+
31+
# Enable authorization first
32+
echo "Enabling authorization..."
33+
docker exec rs101 sed -i 's/authorization: disabled/authorization: enabled/' /etc/mongod/mongod.conf
34+
docker exec rs101 systemctl restart mongod
35+
sleep 10
36+
37+
# Setup Kerberos users after authorization is enabled
38+
echo "Setting up Kerberos authentication users..."
39+
# Wait for MongoDB to be ready
40+
sleep 5
41+
# Direct command to create Kerberos user
42+
docker exec rs101 mongo --quiet -u root -p root --authenticationDatabase admin --eval "db.getSiblingDB('\$external').createUser({user: 'pmm-test@PERCONATEST.COM', roles: [{role: 'explainRole', db: 'admin'}, {role: 'clusterMonitor', db: 'admin'}, {role: 'userAdminAnyDatabase', db: 'admin'}, {role: 'dbAdminAnyDatabase', db: 'admin'}, {role: 'readWriteAnyDatabase', db: 'admin'}, {role: 'read', db: 'local'}]})"
43+
echo "✓ Kerberos user setup completed"
44+
3045
bash -x ./configure-agents.sh
3146

3247
if [ $profile = "extra" ]; then

0 commit comments

Comments
 (0)