7. 인증서 생성 관련 준비
인증서 유효기간 변경
- 전자서명 : 5년
- ca 인증서 : 10년
인증서 유효기간 변경
- 전자서명 : 5년
- ca 인증서 : 10년
8. 인증서 생성 관련 준비
인증서 생성관련 파일을 NFS로 복사
chmod a+x /mnt/nfs_vb_share/scripts/*
cd /mnt/nfs_vb_share/
mkdir organizations
cp -r fabric-ca/ organizations/
9. 인증서 생성 관련 준비 - fabric ca
ca-org1.yaml
① nfs 에 인증서 설정 yaml 이 있고, 이 경로를 pod의 subPath로 지정
② pod 기동 이후로, nfs 확인해 보면 pod의
/etc/Hyperledger/fabric-ca-server의 파일이 nfs로 mount됨을 확인
10. 인증서 생성 관련 준비 - fabric ca
• k apply -f ca-org1.yaml
• k apply -f ca-org1-service.yaml
• k apply -f ca-org2.yaml
• k apply -f ca-org2-service.yaml
• k apply -f ca-orderer.yaml
• k apply -f ca-orderer-service.yaml
11. 인증서 생성 관련 준비
• 인증서 생성 쉘 스크립트 준비하여 NFS 서버로 복사
• 인증서 생성 Job 실행
k apply -f job.yaml
12. 실행 중 스토리지 부족 오류 발생 대처
예> VB에서 25GB의 공간을 VDI로 할당하였는데, 우부투에서
df –h 로 확인한 공간이 12GB로 절반이하로 할당된 상황
$ lvm
lvm> lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
lvm> exit
$ resize2fs /dev/ubuntu-vg/ubuntu-lv
<Tip> 우분투에서 VirtualBox에서 할당한 공간보다
하드디스크 공간이 부족하게 잡히는 경우
26. Debugging
networking
issues with
multi-node
Kubernetes
on
VirtualBox
• 클러스터내에서 dns 조회가 안되는 현상
(예> ping orderer, nslookup orderer)
• 진단을 위한 pod 설치
진단은 https://kubernetes.io/docs/tasks/administer-
cluster/dns-debugging-resolution/ 를 참조
kubectl apply -f
https://k8s.io/examples/admin/dns/dnsutils.yaml
• 아래 명령에서 오류 확인
kubectl exec -i -t dnsutils -- nslookup kubernetes.default
• 해당 pod로 진입하여, nslookup 확인 (오류 확인)
kubectl exec -it dnsutils -- bash
nslookup kubernetes.default
• 원인
flannel이 Virtual Box의 NAT 인터페이스(enp0s3, 10.0.*.*)으로
네트워크 인터페이스를 사용하여 문제가 발생
쿠버네티스 클러스터를 연결하는 Bridge 인터페이스(enp0s8,
192.168.56.*)을 사용하도록 설정해야 함
29. 체인코드 준비 & 배포 준비
• 체인코드 준비 및 NFS 서버로 복사
• /mnt/nfs_clientshare/chaincode/basic/packaging
In packaging directory,
tar cfz code.tar.gz connection.json
tar cfz basic-org1.tgz code.tar.gz metadata.json
rm code.tar.gz
open connection.json & replace "basic-org1" with "basic-org2"
tar cfz code.tar.gz connection.json
tar cfz basic-org2.tgz code.tar.gz metadata.json
rm code.tar.gz
30. 체인코드 설치
• In every cli Container,
cd /opt/gopath/src/github.com/chaincode/basic/packaging
peer lifecycle chaincode install basic-org<N>.tgz
31. 체인코드 컨테이너 생성
Dockerfile을 통해 go 빌드하지 않고,
native 빌드를 해야 추후 컨테이너가
정상 작동한다.
go build -o chaincode -v .
Dockerfile
go 빌드 결과
33. 체인코드 Pod 생성 준비
• org<N>-chaincode-deployment.yaml 설정
이전 장에서 체인코드 설치한 결과로 받은 id값을 설정하고 org1-chaincode-deployment.yaml,
org2-chaincode-deployment.yaml 배포 k apply -f .
44. rest-api-go 컨테이너 빌드
기 생성된 인증서 중 org2.fmd.com 만 nfs로 부터 복사하여
도커 빌드할 서버의 소스 디렉토리에 위치 시킨다.
main.go를 빌드하여 restsvc 실행파일을 생성한다.
go build -o restsvc -v .
도커 빌드를 한다. Dockerfile는 좌측과 같다.
docker build --no-cache -t wyhwang/basic-rest-svc:5.0 .
테스트 하고 push한다.
docker run wyhwang/basic-rest-svc:5.0
docker push wyhwang/basic-rest-svc:5.0
46. peer 버전 변경
• 변경 사유
rest-api-go 컨테이너는 Fabric Gateway 서비스를 사용하여 peer와 통신한다.
이 Gateway서비스는 fabric peer 2.4 이상부터 지원한다.
peer 버전 변경 후, 다시 적용한다.
peer 가 시작되고 약간의 시간(몇 분)이 지나면 g/w에서 정상응답이 가능하다.
51. 소스 파일 변경 및 빌드
기 생성된 인증서 중 org2.fmd.com 만 nfs로 부터 복사하여
도커 빌드할 서버의 소스 디렉토리에 위치 시킨다.
main.go를 빌드하여 restsvc 실행파일을 생성한다.
go build -o restsvc -v .
도커 빌드를 한다. Dockerfile는 좌측과 같다.
docker build --no-cache -t wyhwang/basic-rest-svc:6.0 .
Dockerfile
52. 컨테이너 테스트
테스트 하고 push한다.
- 테스트는 외부 환경 변수를 아래와 같이 설정하여 시뮬레이션 한다.
push한다.
docker push wyhwang/basic-rest-svc:6.0