mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 07:25:10 +00:00
This PR replaces deprecated containerd registry.mirrors configuration with config_path mode and hosts.toml, required for containerd 2.x (KIND v0.27.0+). The old configuration prevents the CRI plugin from loading, causing kubelet to fail on startup. Also, this fixes CA enrollment in create_node_local_MSP() to specify port 443 explicitly, and other minor issues, including removing redundant throws from Java close() methods. Signed-off-by: Tatsuya Sato <tatsuya.sato.so@hitachi.com> Co-authored-by: Mark S. Lewis <Mark.S.Lewis@outlook.com>
218 lines
6.4 KiB
Bash
Executable file
218 lines
6.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Copyright IBM Corp All Rights Reserved
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
function launch_orderers() {
|
|
push_fn "Launching orderers"
|
|
|
|
apply_template kube/org0/org0-orderer1.yaml $ORG0_NS
|
|
apply_template kube/org0/org0-orderer2.yaml $ORG0_NS
|
|
apply_template kube/org0/org0-orderer3.yaml $ORG0_NS
|
|
|
|
kubectl -n $ORG0_NS rollout status deploy/org0-orderer1
|
|
kubectl -n $ORG0_NS rollout status deploy/org0-orderer2
|
|
kubectl -n $ORG0_NS rollout status deploy/org0-orderer3
|
|
|
|
if [ "${ORDERER_TYPE}" == "bft" ]; then
|
|
apply_template kube/org0/org0-orderer4.yaml $ORG0_NS
|
|
kubectl -n $ORG0_NS rollout status deploy/org0-orderer4
|
|
fi
|
|
|
|
pop_fn
|
|
}
|
|
|
|
function launch_peers() {
|
|
push_fn "Launching peers"
|
|
|
|
apply_template kube/org1/org1-peer1.yaml $ORG1_NS
|
|
apply_template kube/org1/org1-peer2.yaml $ORG1_NS
|
|
apply_template kube/org2/org2-peer1.yaml $ORG2_NS
|
|
apply_template kube/org2/org2-peer2.yaml $ORG2_NS
|
|
|
|
kubectl -n $ORG1_NS rollout status deploy/org1-peer1
|
|
kubectl -n $ORG1_NS rollout status deploy/org1-peer2
|
|
kubectl -n $ORG2_NS rollout status deploy/org2-peer1
|
|
kubectl -n $ORG2_NS rollout status deploy/org2-peer2
|
|
|
|
pop_fn
|
|
}
|
|
|
|
# Each network node needs a registration, enrollment, and MSP config.yaml
|
|
function create_node_local_MSP() {
|
|
local node_type=$1
|
|
local org=$2
|
|
local node=$3
|
|
local csr_hosts=$4
|
|
local ns=$5
|
|
local id_name=${org}-${node}
|
|
local id_secret=${node_type}pw
|
|
local ca_name=${org}-ca
|
|
|
|
# Register the node admin
|
|
rc=0
|
|
fabric-ca-client register \
|
|
--id.name ${id_name} \
|
|
--id.secret ${id_secret} \
|
|
--id.type ${node_type} \
|
|
--url https://${ca_name}.${DOMAIN}:${NGINX_HTTPS_PORT} \
|
|
--tls.certfiles $TEMP_DIR/cas/${ca_name}/tlsca-cert.pem \
|
|
--mspdir $TEMP_DIR/enrollments/${org}/users/${RCAADMIN_USER}/msp \
|
|
|| rc=$? # trap error code from registration without exiting the network driver script"
|
|
|
|
if [ $rc -eq 1 ]; then
|
|
echo "CA admin was (probably) previously registered - continuing"
|
|
fi
|
|
|
|
# Enroll the node admin user from within k8s. This will leave the certificates available on a volume share in the
|
|
# cluster for access by the nodes when launching in a container.
|
|
cat <<EOF | kubectl -n ${ns} exec deploy/${ca_name} -i -- /bin/sh
|
|
|
|
set -x
|
|
export FABRIC_CA_CLIENT_HOME=/var/hyperledger/fabric-ca-client
|
|
export FABRIC_CA_CLIENT_TLS_CERTFILES=/var/hyperledger/fabric/config/tls/ca.crt
|
|
|
|
# Enroll from inside the CA pod. Must specify port 443 explicitly.
|
|
# CA server listens on port 443, but fabric-ca-client defaults to 7054 when port is omitted in the URL.
|
|
fabric-ca-client enroll \
|
|
--url https://${id_name}:${id_secret}@${ca_name}:443 \
|
|
--csr.hosts ${csr_hosts} \
|
|
--mspdir /var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp
|
|
|
|
# Copy CA cert to expected filename (fabric-ca-client saves it as <hostname>-<port>.pem)
|
|
cp /var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp/cacerts/*.pem \
|
|
/var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp/cacerts/${org}-ca.pem
|
|
|
|
# Create local MSP config.yaml
|
|
echo "NodeOUs:
|
|
Enable: true
|
|
ClientOUIdentifier:
|
|
Certificate: cacerts/${org}-ca.pem
|
|
OrganizationalUnitIdentifier: client
|
|
PeerOUIdentifier:
|
|
Certificate: cacerts/${org}-ca.pem
|
|
OrganizationalUnitIdentifier: peer
|
|
AdminOUIdentifier:
|
|
Certificate: cacerts/${org}-ca.pem
|
|
OrganizationalUnitIdentifier: admin
|
|
OrdererOUIdentifier:
|
|
Certificate: cacerts/${org}-ca.pem
|
|
OrganizationalUnitIdentifier: orderer" > /var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp/config.yaml
|
|
EOF
|
|
}
|
|
|
|
function create_orderer_local_MSP() {
|
|
local org=$1
|
|
local orderer=$2
|
|
local csr_hosts=${org}-${orderer}
|
|
|
|
create_node_local_MSP orderer $org $orderer $csr_hosts $ORG0_NS
|
|
}
|
|
|
|
function create_peer_local_MSP() {
|
|
local org=$1
|
|
local peer=$2
|
|
local ns=$3
|
|
local csr_hosts=localhost,${org}-${peer},${org}-peer-gateway-svc
|
|
|
|
create_node_local_MSP peer $org $peer $csr_hosts ${ns}
|
|
}
|
|
|
|
function create_local_MSP() {
|
|
push_fn "Creating local node MSP"
|
|
|
|
create_orderer_local_MSP org0 orderer1
|
|
create_orderer_local_MSP org0 orderer2
|
|
create_orderer_local_MSP org0 orderer3
|
|
if [ "${ORDERER_TYPE}" == "bft" ]; then
|
|
create_orderer_local_MSP org0 orderer4
|
|
fi
|
|
|
|
create_peer_local_MSP org1 peer1 $ORG1_NS
|
|
create_peer_local_MSP org1 peer2 $ORG1_NS
|
|
|
|
create_peer_local_MSP org2 peer1 $ORG2_NS
|
|
create_peer_local_MSP org2 peer2 $ORG2_NS
|
|
|
|
pop_fn
|
|
}
|
|
|
|
function network_up() {
|
|
|
|
# Kube config
|
|
init_namespace
|
|
init_storage_volumes
|
|
load_org_config
|
|
|
|
# Service account permissions for the k8s builder
|
|
if [ "${CHAINCODE_BUILDER}" == "k8s" ]; then
|
|
apply_k8s_builder_roles
|
|
apply_k8s_builders
|
|
fi
|
|
|
|
# Network TLS CAs
|
|
init_tls_cert_issuers
|
|
|
|
# Network ECert CAs
|
|
launch_ECert_CAs
|
|
enroll_bootstrap_ECert_CA_users
|
|
|
|
# Test Network
|
|
create_local_MSP
|
|
|
|
launch_orderers
|
|
launch_peers
|
|
}
|
|
|
|
function stop_services() {
|
|
push_fn "Stopping Fabric services"
|
|
for ns in $ORG0_NS $ORG1_NS $ORG2_NS; do
|
|
kubectl -n $ns delete ingress --all
|
|
kubectl -n $ns delete deployment --all
|
|
kubectl -n $ns delete pod --all
|
|
kubectl -n $ns delete service --all
|
|
kubectl -n $ns delete configmap --all
|
|
kubectl -n $ns delete cert --all
|
|
kubectl -n $ns delete issuer --all
|
|
kubectl -n $ns delete secret --all
|
|
done
|
|
|
|
pop_fn
|
|
}
|
|
|
|
function scrub_org_volumes() {
|
|
push_fn "Scrubbing Fabric volumes"
|
|
for org in org0 org1 org2; do
|
|
# clean job to make this function can be rerun
|
|
local namespace_variable=${org^^}_NS
|
|
kubectl -n ${!namespace_variable} delete jobs --all
|
|
|
|
# scrub all pv contents
|
|
kubectl -n ${!namespace_variable} create -f kube/${org}/${org}-job-scrub-fabric-volumes.yaml
|
|
kubectl -n ${!namespace_variable} wait --for=condition=complete --timeout=60s job/job-scrub-fabric-volumes
|
|
kubectl -n ${!namespace_variable} delete jobs --all
|
|
done
|
|
pop_fn
|
|
}
|
|
|
|
function network_down() {
|
|
|
|
set +e
|
|
for ns in $ORG0_NS $ORG1_NS $ORG2_NS; do
|
|
kubectl get namespace $ns > /dev/null
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "No namespace $ns found - nothing to do."
|
|
return
|
|
fi
|
|
done
|
|
set -e
|
|
|
|
stop_services
|
|
scrub_org_volumes
|
|
|
|
delete_namespace
|
|
|
|
rm -rf $PWD/build
|
|
}
|