Match ALB Node Objects(Front) - 1.22 Version

Hoju·2022년 8월 24일
0
post-custom-banner

선택사항입니다. 이미 CLI로 생성할 떄 추가 해줬기 때문에 굳이 안해도 되지만, Label 추가 방법은 소개드리고 싶어서 아래 명령을 작성합니다.(https://ikcoo.tistory.com/89 - affinity)

kubectl label nodes ip-10-0-0-171.ap-northeast-2.compute.internal worker1=front
kubectl label nodes ip-10-0-1-137.ap-northeast-2.compute.internal worker1=front

1. Namespace Create

kubectl create namespace wsi-skills-namespace

2. Deployment Object Create

Key: Value가 있는 특정 WorkerNode에 Pod 배포 → Deployment(object) Pod 배포

cat << EOF > frontdeployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: front-deployment
  namespace: wsi-skills-namespace
  labels:
    app: front-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: front-deployment
  template:
    metadata:
      labels:
        app: front-deployment
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: workernode #Node Key #Label에 Key 입니다.
                operator: In
                values:
                - front #Node Value #Label에 Value입니다
      containers:
      - name: wsi-front-container #Container Name
        image: [[DockerImage]]
        ports:
        - containerPort: 8080 #Container Image Port
        readinessProbe:
          httpGet:
            path: /home #Health Check Path
            port: 8080
EOF

kubectl apply -f frontdeployment.yaml
  1. Deployment Object가 즉, Pod가 정상적으로 실행중인지 아래 명령어로 확인합니다.
kubectl get pods -n wsi-skills-namespace
kubectl get pods -o wide -n wsi-skills-namespace #현재 어떤 노드에 실행중인지 확인
kubectl logs [PodName] -n wsi-skills-namespace #Pod에 Log를 확인할 수 있습니다.
kubectl describe pods [PodName] -n wsi-skills-namespace #Pod에 세부 사항을 확인할 수 있습니다.

3. Service 배포

위에서 생성한 Deployment Object Pod를 Service에 연결합니다.

cat << EOF > frontservice.yaml
apiVersion: v1
kind: Service
metadata:
  name: wsi-match-service
  labels:
    app: front-deployment
  namespace: wsi-skills-namespace
  annotations:
    alb.ingress.kubernetes.io/healthcheck-path: "/healthcheck path" #대상그룹에 HealthCheck 경로입니다. 즉, golang 파일에 따라 바뀝니다.
spec:
  selector:
    app: front-deployment #selector를 사용해서 Label이 매치되는 Pod를 Service와 연결합니다.
  type: NodePort
  ports:
    - port: 80 #Service Port를 설정합니다.
      targetPort: 8080 #TargetGroup Port
      protocol: TCP #Protocol 설정
EOF

kubectl apply -f frontservice.yaml

4. Ingress 배포

위에서 생성한 Service를 Ingress에 연결해서 ALB를 생성합니다.

cat << EOF > frontingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: "wsi-match-ingress"
    namespace: wsi-skills-namespace
    annotations:
      alb.ingress.kubernetes.io/load-balancer-name: wsi-match-alb #ALB Name
      kubernetes.io/ingress.class: alb
      alb.ingress.kubernetes.io/scheme: internet-facing #외부 Schema
      alb.ingress.kubernetes.io/target-type: ip #Ip 즉, Pod를 TargetGroup에 연결
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]' #리스너 설정, 이 부분은 즉, ALB에 보안그룹에도 관련이있다.
      alb.ingress.kubernetes.io/subnets: wsi-public-a, wsi-public-b #Subnet Name을 통해서 Ingress 지정(Subnet을 찾을 수 없다는 에러가 뜨면 지정합니다.)
spec:
    rules:
    - http:
        paths:
          - path: / #ALB 리스너 규칙 /로 지정하면 /*는 생성되는 대상그룹으로 트래픽 전달
            pathType: Prefix
            backend:
              service:
                name: "wsi-match-service"
                port:
                  number: 80 #전 단계에서 생성한 서비스 포트입니다. 다르게 설정하면 생성되지 않습니다.
EOF
 
 kubectl apply -f frontingress.yaml
profile
Devops가 되고 싶은 청소년
post-custom-banner

0개의 댓글