k8s 클러스터 직접 구성해보기_11

duckiee·2022년 11월 29일
0

k8s 클러스터 구성

목록 보기
11/11

이번 포스트는 구성된 쿠버네티스의 스모크 테스트를 진행합니다.

이전 시리즈와 같이, 작업에 사용되는 명령어는 아래 깃허브에서 확인 가능합니다.

URL : https://github.com/go4real/kubernetes-the-hard-way-aws/blob/master/docs/13-smoke-test.md

  1. Data Encryption
  • 외부 클라이언트에서 secret 생성
$ kubectl create secret generic kubernetes-the-hard-way \
  --from-literal="mykey=mydata"
  • controller-0 서버 접속하여 secret 파일 조회
# controller-0 서버 Public IP 조회
$ external_ip=$(aws ec2 describe-instances --filters \
  "Name=tag:Name,Values=controller-0" \
  "Name=instance-state-name,Values=running" \
  --output text --query 'Reservations[].Instances[].PublicIpAddress')

# ETCDCTL 사용하여 secret 파일 16진수로 출력
ssh -i kubernetes.id_rsa ubuntu@${external_ip} \
 "sudo ETCDCTL_API=3 etcdctl get \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/etcd/ca.pem \
  --cert=/etc/etcd/kubernetes.pem \
  --key=/etc/etcd/kubernetes-key.pem\
  /registry/secrets/default/kubernetes-the-hard-way | hexdump -C"
  • 결과 : AES/CBC 알고리즘으로 암호화
  1. Deployments
  • nginx 이미지로 pod 생성하여 배포
# nginx 이미지로 pod 생성
$ kubectl create deployment nginx --image=nginx
  • nginx pod 동작여부 확인
$ kubectl get pods -l app=nginx

  • nginx pod 포트 포워딩 및 접속 테스트
# nginx pod 풀네임 조회
$ POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath="{.items[0].metadata.name}")

# nginx pod의 80포트를 외부에서 8080포트로 접속하도록 포워딩
$ kubectl port-forward $POD_NAME 8080:80

# 클라이언트에서 8080포트로 nginx pod내 사이트 접속
$ curl --head http://127.0.0.1:8080
  • curl 접속 결과

  • nginx pod 로그 및 nginx 버전 조회

$ kubectl logs $POD_NAME
$ kubectl exec -ti $POD_NAME -- nginx -v
  1. Services
  • 2번 내용의 접속 테스트는 kubectl을 통해 nginx pod의 로컬호스트로 접속했습니다.
  • 현재 nginx pod는 외부 네트워크에 대해 접속이 혀용되지 않은 상태입니다.
  • nginx pod에서 외부에 노출 시키는 NodePort에 대한 방화벽 정책을 보안그룹에 적용하여 외부 접속을 혀용합니다.
  • nginx pod에서 포트 노출
$ kubectl expose deployment nginx --port 80 --type NodePort
  • Node Port 확인하여 워커노드 서버 보안그룹 방화벽 정책 추가
# 노드포트 확인
$ NODE_PORT=$(kubectl get svc nginx \
  --output=jsonpath='{range .spec.ports[0]}{.nodePort}')
  
# 조회한 노드 포트 보안그룹에서 허용
$ SECURITY_GROUP_ID=$(aws ec2 describe-security-groups --filters 'Name=tag:Name,Values=kubernetes' --query 'SecurityGroups[*].[GroupId]' --output text)

aws ec2 authorize-security-group-ingress \
  --group-id ${SECURITY_GROUP_ID} \
  --protocol tcp \
  --port ${NODE_PORT} \
  --cidr 0.0.0.0/0
  • nginx pod 호스트 서버 public IP로 사이트 접속
# nginx pod가 동작하는 서버 확인
$ INSTANCE_NAME=$(kubectl get pod $POD_NAME --output=jsonpath='{.spec.nodeName}')

# nginx pod가 동작하는 서버 public IP 조회
$ EXTERNAL_IP=$(aws ec2 describe-instances --filters \
    "Name=instance-state-name,Values=running" \
    "Name=network-interface.private-dns-name,Values=${INSTANCE_NAME}.*.internal*" \
    --output text --query 'Reservations[].Instances[].PublicIpAddress')
    
# nginx pod에서 사용하는 사이트 curl로 접속
$ curl -I http://${EXTERNAL_IP}:${NODE_PORT}
  • 사이트 접속 결과(curl)
  • 사이트 접속 결과(브라우저)
profile
DevOps로 진화하기

0개의 댓글