Escenario: Ejecutar código de cadena como servicio

El siguiente ejemplo ilustra la ejecución del código de cadena FabCar como un servicio externo (un pod en el cluster de Kubernetes) que, a continuación, puede desplegar en Oracle Blockchain Platform.

Antes de realizar los siguientes pasos, despliegue el código de cadena como paquete externo en Oracle Blockchain Platform.

  1. Clone el directorio GitHub en el repositorio hyperledger/fabric-samples que contiene fabcar/external. El directorio contiene la versión externa del código de cadena FabCar en Go, fabcar.go y un archivo Dockerfile. Ignore los archivos metadata.json y chaincode.env.example.
  2. 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 las 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.

  3. Ejecute el siguiente comando para crear la imagen de Docker, que crea una imagen de Docker denominada fabcar-sample que, a continuación, se puede transferir a un repositorio.
    docker build -t fabcar-sample .
  4. Cree un archivo YAML de despliegue de Kubernetes para ejecutar la imagen de Docker que contiene el código de cadena. El siguiente ejemplo muestra un archivo deployment.yaml. El repositorio del que se extrae la imagen de Docker es repository.example.org. El nombre secreto de Kubernetes que se utiliza para extraer imágenes es ocirsecret. El valor CHAINCODE_SERVER_ADDRESS es 0.0.0.0:9999, lo 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 valor CHAINCODE_ID del ID de paquete de código de cadena que se muestra al desplegar en el nodo peer de 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 identificador de código de cadena se muestra como chaincode_name:package_ID. Para el código de cadena Java, la variable de identificador de código de cadena se denomina CORE_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
  5. Ejecute el siguiente comando para generar un secreto de Kubernetes en el espacio de nombres chaincode. Para name_of_secret, especifique el secreto del archivo deployment.yaml. En este ejemplo, el nombre del secreto es ocirsecret.
    kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token'
  6. 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 cadena externo desde Oracle Blockchain Platform.