Skip to content

Commit ecccd41

Browse files
Merge pull request #1168 from Deydra71/noapi-tls-kuttl
[kuttl] Add tls scenarios for non API services
2 parents 3486268 + dbda2df commit ecccd41

File tree

6 files changed

+119
-0
lines changed

6 files changed

+119
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/bin/bash
2+
3+
NAMESPACE=${NAMESPACE}
4+
5+
declare -A services_secrets=(
6+
["ceilometer-internal"]="cert-ceilometer-internal-svc"
7+
["ovsdbserver-nb-0"]="cert-ovndbcluster-nb-ovndbs"
8+
["ovsdbserver-sb-0"]="cert-ovndbcluster-sb-ovndbs"
9+
["rabbitmq"]="cert-rabbitmq-svc"
10+
["rabbitmq-cell1"]="cert-rabbitmq-cell1-svc"
11+
)
12+
13+
declare -A database_secrets=(
14+
["openstack"]="cert-galera-openstack-svc"
15+
["openstack-cell1"]="cert-galera-openstack-cell1-svc"
16+
)
17+
18+
mismatched_services=()
19+
20+
# Gather the ClusterIP and ports for general services
21+
for service in "${!services_secrets[@]}"; do
22+
secret="${services_secrets[$service]}"
23+
24+
service_info=$(oc get service "$service" -n "$NAMESPACE" -o jsonpath="{.spec.clusterIP} {.spec.ports[*].port}")
25+
cluster_ip=$(echo "$service_info" | awk '{print $1}')
26+
ports=$(echo "$service_info" | cut -d' ' -f2-)
27+
28+
echo "Checking service: $service (ClusterIP: $cluster_ip, Ports: $ports)"
29+
30+
# Fetch the certificate from the secret and decode it
31+
secret_cert=$(oc get secret "$secret" -n "$NAMESPACE" -o jsonpath="{.data['tls\.crt']}" | base64 --decode 2>&1)
32+
if [[ -z "$secret_cert" ]]; then
33+
echo "Error retrieving or decoding certificate from secret $secret for service $service."
34+
continue
35+
fi
36+
37+
for port in $ports; do
38+
echo "Connecting to $service on port $port..."
39+
40+
# Captures the certificate section from the openssl output
41+
pod_cert=$(oc rsh -n "$NAMESPACE" openstackclient openssl s_client -connect "$cluster_ip:$port" -servername "$cluster_ip" </dev/null 2>/dev/null | sed -ne '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p')
42+
43+
if [[ -z "$pod_cert" ]]; then
44+
echo "Error retrieving certificate from $service at $cluster_ip:$port."
45+
continue
46+
fi
47+
48+
if [[ "$pod_cert" == "$secret_cert" ]]; then
49+
echo "Certificates for $service on port $port match the secret."
50+
else
51+
echo "Certificates for $service on port $port DO NOT match the secret."
52+
mismatched_services+=("$service on port $port")
53+
fi
54+
done
55+
done
56+
57+
# Gather the ClusterIP and ports for databases
58+
for database in "${!database_secrets[@]}"; do
59+
secret="${database_secrets[$database]}"
60+
61+
database_info=$(oc get service "$database" -n "$NAMESPACE" -o jsonpath="{.spec.clusterIP} {.spec.ports[*].port}")
62+
cluster_ip=$(echo "$database_info" | awk '{print $1}')
63+
ports=$(echo "$database_info" | cut -d' ' -f2-)
64+
65+
echo "Checking database: $database (ClusterIP: $cluster_ip, Ports: $ports)"
66+
67+
# Fetch the certificate from the secret and decode it
68+
secret_cert=$(oc get secret "$secret" -n "$NAMESPACE" -o jsonpath="{.data['tls\.crt']}" | base64 --decode 2>&1)
69+
if [[ -z "$secret_cert" ]]; then
70+
echo "Error retrieving or decoding certificate from secret $secret for database $database."
71+
continue
72+
fi
73+
74+
for port in $ports; do
75+
echo "Connecting to $database on port $port..."
76+
77+
pod_cert=$(oc rsh -n "$NAMESPACE" openstackclient openssl s_client -starttls mysql -connect "$cluster_ip:$port" </dev/null 2>/dev/null | sed -ne '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p')
78+
79+
if [[ -z "$pod_cert" ]]; then
80+
echo "Error retrieving certificate from $database at $cluster_ip:$port."
81+
continue
82+
fi
83+
84+
if [[ "$pod_cert" == "$secret_cert" ]]; then
85+
echo "Certificates for $database on port $port match the secret."
86+
else
87+
echo "Certificates for $database on port $port DO NOT match the secret."
88+
mismatched_services+=("$database on port $port")
89+
fi
90+
done
91+
done
92+
93+
if [[ ${#mismatched_services[@]} -ne 0 ]]; then
94+
echo "The following services had certificate mismatches:"
95+
for mismatch in "${mismatched_services[@]}"; do
96+
echo " - $mismatch"
97+
done
98+
exit 1
99+
fi

tests/kuttl/tests/ctlplane-tls-cert-rotation/04-assert-service-cert-rotation.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
33
timeout: 900
44
commands:
5+
- script: |
6+
echo "Checking rotation of non API service certificates..."
7+
NAMESPACE=$NAMESPACE bash ../../common/osp_check_noapi_service_certs.sh
8+
59
- script: |
610
echo "Get fingerprints of all service certs"
711
oc exec -i openstackclient -n $NAMESPACE -- bash -s < ../../common/osp_endpoint_fingerprints.sh > /tmp/endpoint_fingerprints_after

tests/kuttl/tests/ctlplane-tls-custom-issuers/02-assert-service-certs-issuers.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
33
timeout: 60
44
commands:
5+
- script: |
6+
echo "Checking rotation of non API service certificates..."
7+
NAMESPACE=$NAMESPACE bash ../../common/osp_check_noapi_service_certs.sh
8+
59
- script: |
610
echo "Checking issuer of internal certificates..."
711
oc exec -i openstackclient -n $NAMESPACE -- bash -s < ../../common/osp_check_cert_issuer.sh "issuer=CN=rootca-internal-custom" "internal"

tests/kuttl/tests/ctlplane-tls-custom-issuers/04-assert-service-certs-default-issuers.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ commands:
66
echo "Waiting for OpenStack control plane to be ready..."
77
oc wait openstackcontrolplane -n $NAMESPACE --for=condition=Ready --timeout=400s -l core.openstack.org/openstackcontrolplane
88
9+
- script: |
10+
echo "Checking rotation of non API service certificates..."
11+
NAMESPACE=$NAMESPACE bash ../../common/osp_check_noapi_service_certs.sh
12+
913
- script: |
1014
echo "Checking issuer of internal certificates..."
1115
oc exec -i openstackclient -n $NAMESPACE -- bash -s < ../../common/osp_check_cert_issuer.sh "issuer=CN=rootca-internal" "internal"

tests/kuttl/tests/ctlplane-tls-custom-issuers/07-assert-service-certs-default-issuers.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
33
timeout: 60
44
commands:
5+
- script: |
6+
echo "Checking rotation of non API service certificates..."
7+
NAMESPACE=$NAMESPACE bash ../../common/osp_check_noapi_service_certs.sh
8+
59
- script: |
610
echo "Checking issuer of internal certificates..."
711
oc exec -i openstackclient -n $NAMESPACE -- bash -s < ../../common/osp_check_cert_issuer.sh "issuer=CN=rootca-internal" "internal"

tests/kuttl/tests/ctlplane-tls-custom-issuers/10-assert-service-certs-issuers.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ commands:
66
echo "Waiting for OpenStack control plane to be ready..."
77
oc wait openstackcontrolplane -n $NAMESPACE --for=condition=Ready --timeout=400s -l core.openstack.org/openstackcontrolplane
88
9+
- script: |
10+
echo "Checking rotation of non API service certificates..."
11+
NAMESPACE=$NAMESPACE bash ../../common/osp_check_noapi_service_certs.sh
12+
913
- script: |
1014
echo "Checking issuer of internal certificates..."
1115
oc exec -i openstackclient -n $NAMESPACE -- bash -s < ../../common/osp_check_cert_issuer.sh "issuer=CN=rootca-internal-custom" "internal"

0 commit comments

Comments
 (0)