Skip to content

Instantly share code, notes, and snippets.

@rvennam
Last active June 29, 2023 13:19
Show Gist options
  • Save rvennam/c317328d2e0970daf124029859039c38 to your computer and use it in GitHub Desktop.
Save rvennam/c317328d2e0970daf124029859039c38 to your computer and use it in GitHub Desktop.
RELAY_ROOT_CERT_NAME=relay-root
RELAY_SERVER_CERT_NAME=relay-server-tls
RELAY_SIGNING_CERT_NAME=relay-tls-signing
MGMT_CONTEXT=mgmt
REMOTE_CONTEXT=cluster1
echo "creating root cert ..."
openssl req -new -newkey rsa:4096 -x509 -sha256 \
-days 3650 -nodes -out ${RELAY_ROOT_CERT_NAME}.crt -keyout ${RELAY_ROOT_CERT_NAME}.key \
-subj "/CN=enterprise-networking-ca" \
-addext "extendedKeyUsage = clientAuth, serverAuth"
echo "creating grpc server tls cert ..."
# server cert
cat > "${RELAY_SERVER_CERT_NAME}.conf" <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, serverAuth
subjectAltName = @alt_names
[alt_names]
DNS = *.mgmt-ocp-cluster-0ca535f43f530e703037d0998030fd5f-0000.us-east.containers.appdomain.cloud
EOF
openssl genrsa -out "${RELAY_SERVER_CERT_NAME}.key" 2048
openssl req -new -key "${RELAY_SERVER_CERT_NAME}.key" -out ${RELAY_SERVER_CERT_NAME}.csr -subj "/CN=enterprise-networking-ca" -config "${RELAY_SERVER_CERT_NAME}.conf"
openssl x509 -req \
-days 3650 \
-CA ${RELAY_ROOT_CERT_NAME}.crt -CAkey ${RELAY_ROOT_CERT_NAME}.key \
-set_serial 0 \
-in ${RELAY_SERVER_CERT_NAME}.csr -out ${RELAY_SERVER_CERT_NAME}.crt \
-extensions v3_req -extfile "${RELAY_SERVER_CERT_NAME}.conf"
echo "creating identity server signing cert ..."
# Signing cert. When the agents first connect to the mgmt plane, they do so over standard TLS (not mTLS). When they first connect, they offer their token and the mgmt cluster will sign a new client cert. The cert a it uses is the signing cert. It will use the signing cert to generate the certs for the agent.
cat > "${RELAY_SIGNING_CERT_NAME}.conf" <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = critical,CA:TRUE
keyUsage = digitalSignature, keyEncipherment, keyCertSign
extendedKeyUsage = clientAuth, serverAuth
subjectAltName = @alt_names
[alt_names]
DNS = *.mgmt-ocp-cluster-0ca535f43f530e703037d0998030fd5f-0000.us-east.containers.appdomain.cloud
EOF
openssl genrsa -out "${RELAY_SIGNING_CERT_NAME}.key" 2048
openssl req -new -key "${RELAY_SIGNING_CERT_NAME}.key" -out ${RELAY_SIGNING_CERT_NAME}.csr -subj "/CN=enterprise-networking-ca" -config "${RELAY_SIGNING_CERT_NAME}.conf"
openssl x509 -req \
-days 3650 \
-CA ${RELAY_ROOT_CERT_NAME}.crt -CAkey ${RELAY_ROOT_CERT_NAME}.key \
-set_serial 0 \
-in ${RELAY_SIGNING_CERT_NAME}.csr -out ${RELAY_SIGNING_CERT_NAME}.crt \
-extensions v3_req -extfile "${RELAY_SIGNING_CERT_NAME}.conf"
# ensure gloo-mesh namespace exists on both mgmt and remote clusters
for context in ${MGMT_CONTEXT} ${REMOTE_CONTEXT}; do
kubectl --context ${context} create namespace gloo-mesh
done
# create secrets from certs
# Note: ${RELAY_SERVER_CERT_NAME}-secret must match the server Helm value `relayTlsSecret.Name`
kubectl create secret generic ${RELAY_SERVER_CERT_NAME}-secret \
--from-file=tls.key=${RELAY_SERVER_CERT_NAME}.key \
--from-file=tls.crt=${RELAY_SERVER_CERT_NAME}.crt \
--from-file=ca.crt=${RELAY_ROOT_CERT_NAME}.crt \
--dry-run=client -oyaml | kubectl apply -f- \
--context ${MGMT_CONTEXT} \
--namespace gloo-mesh
# Note: ${RELAY_SIGNING_CERT_NAME}-secret must match the server Helm value `signingTlsSecret.Name`
kubectl create secret generic ${RELAY_SIGNING_CERT_NAME}-secret \
--from-file=tls.key=${RELAY_SIGNING_CERT_NAME}.key \
--from-file=tls.crt=${RELAY_SIGNING_CERT_NAME}.crt \
--from-file=ca.crt=${RELAY_ROOT_CERT_NAME}.crt \
--dry-run=client -oyaml | kubectl apply -f- \
--context ${MGMT_CONTEXT} \
--namespace gloo-mesh
# Note: ${RELAY_ROOT_CERT_NAME}-tls-secret must match the agent Helm value `relay.rootTlsSecret.Name`
for context in ${MGMT_CONTEXT} ${REMOTE_CONTEXT}; do
echo "creating matching root cert for agent in cluster context ${context}..."
kubectl create secret generic ${RELAY_ROOT_CERT_NAME}-tls-secret \
--from-file=ca.crt=${RELAY_ROOT_CERT_NAME}.crt \
--dry-run=client -oyaml | kubectl apply -f- \
--context ${context} \
--namespace gloo-mesh
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment