Escenario: ejecución de Chaincode como servicio
En el siguiente ejemplo, se muestra la ejecución del código de cadenas FabCar como un servicio externo (un pod en el cluster de Kubernetes) que puede desplegar a continuación en Oracle Blockchain Platform.
Antes de realizar los siguientes pasos, despliegue el código de cadenas como un paquete externo en Oracle Blockchain Platform.
- Clone el directorio GitHub en el repositorio
hyperledger/fabric-samples
que contienefabcar/external
. El directorio contiene la versión externa del código de cadenas FabCar en Go,fabcar.go
y un archivoDockerfile
. Ignore los archivosmetadata.json
ychaincode.env.example
. - Modifique el archivo
Dockerfile
como se muestra en el siguiente ejemplo:# Use the Go image from Docker Hub with specified versions for Go and Alpine Linux FROM golang:1.13.8-alpine3.10 # Create a directory named "chaincode" in the image RUN mkdir /chaincode # Set "/chaincode" as the working directory within the image WORKDIR /chaincode # Copy the contents of the local directory into "/chaincode" in the image COPY . . # Fetch and install Go dependencies for the project RUN go get -d -v ./... # Install Go dependencies RUN go install -v ./... # Compile the Go code in the current directory, creating an executable binary named "fabcar" RUN go build -o fabcar . # Expose port 9999, indicating that the application within the container will listen on this port EXPOSE 9999 # Set the default command to run the "fabcar" executable when the container starts CMD ["/chaincode/fabcar"]
Esta secuencia de comandos establece la imagen base para crear la nueva imagen en la imagen Go con versiones específicas para Go y Alpine Linux, crea un directorio, establece ese directorio como el directorio de trabajo, copia el contenido local en la imagen, recupera e instala dependencias Go, compila el código Go, configura el contenedor para recibir en el puerto 9999 y define el comando por defecto para ejecutar el ejecutable
fabcar
. - Ejecute el siguiente comando para crear la imagen de Docker, que crea una imagen de Docker denominada
fabcar-sample
, que se puede transferir a un repositorio.docker build -t fabcar-sample .
- Cree un archivo YAML de despliegue de Kubernetes para ejecutar la imagen de Docker que contiene el código de cadenas. En el siguiente ejemplo, se muestra un archivo
deployment.yaml
. El repositorio del que se extrae la imagen de Docker esrepository.example.org
. El nombre del secreto de Kubernetes que se utiliza para extraer imágenes esocirsecret
. El valorCHAINCODE_SERVER_ADDRESS
es 0.0.0.0:9999, que indica que el servidor está configurado para aceptar conexiones entrantes en el puerto 9999 desde cualquier dirección IP asociada al equipo. Obtenga el valorCHAINCODE_ID
del ID de paquete de código de cadena que se muestra al desplegar en el nodo peer en Oracle Blockchain Platform seleccionando el tipo de código de cadena externo y cargando un archivo.zip
. En la interfaz de usuario de Oracle Blockchain Platform, el ID de código de cadena se muestra como chaincode_name:package_ID. Para el código de cadenas Java, la variable de ID de código de cadenas se denominaCORE_CHAINCODE_ID_NAME
.apiVersion: apps/v1 kind: Deployment metadata: name: external-fabcar-node namespace: chaincode labels: chaincode-type: external chaincode-name: external-fabcar-node spec: replicas: 1 selector: matchLabels: chaincode-type: external chaincode-name: external-fabcar-node template: metadata: labels: chaincode-type: external chaincode-name: external-fabcar-node spec: imagePullSecrets: - name: ocirsecret containers: - env: - name: CHAINCODE_SERVER_ADDRESS value: "0.0.0.0:9999" - name: CHAINCODE_ID value: "ext-fabcar-node:7f953544f26124914c29467d5079f601ddefa53375fffec830ecd70c13547877" image: repository.example.org/blockchain/fabcar-sample:latest imagePullPolicy: Always name: assettransfer ports: - containerPort: 9999 name: grpc protocol: TCP --- apiVersion: v1 kind: Service metadata: labels: chaincode-name: external-fabcar-node chaincode-type: external name: external-fabcar-node namespace: chaincode spec: ports: - name: grpc port: 9999 protocol: TCP targetPort: 9999 selector: chaincode-name: external-fabcar-node chaincode-type: external type: ClusterIP
- Ejecute el siguiente comando para generar un secreto de Kubernetes en el espacio de nombres
chaincode
. Para name_of_secret, especifique el secreto del archivodeployment.yaml
. En este ejemplo, el nombre del secreto esocirsecret
.kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token'
- Ejecute el siguiente comando para desplegar el pod y el servicio de Kubernetes.
kubectl apply -f deployment.yaml
Ahora puede ejecutar transacciones que utilicen el código de cadenas externo de Oracle Blockchain Platform.