250x250
Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

삽더하기실수

Headless 본문

K8s

Headless

삽수 2024. 3. 8. 16:16
728x90
클러스터 IP란
파드와 파드 간의 내부 연결을 위해 사용한다

 

헤드리스란
클러스테 IP를 None 으로 설정하여 도메인으로 연결이 가능하도록 하는것

그렇다면 왜 헤드리스를 사용하는가?
클러스 ip를 사용하는 것 자체가 내부에서의 연결을 위한것이다. 그러므로 pod의 도메인을 A레코드 처럼 사용하면 해당 위치를 다른 값으로 받을 수 있어 각각의 다른 화면을 쓰기 위해 사용한다.

 

clusterip.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: cl-nginx
spec:
  selector:
    app: deploy-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

 

headless.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: hdl-nginx
spec:
  selector:
    app: deploy-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  clusterIP: None

 

 

위와 같이 cluster ip를 None 처리를 하게 되면 하기와 같이 svc가 나타나게 된다.

 

도메인 값으로 불러들이면 정상적으로 ip를 받는것이 보인다.

 

태스트

해당 접근 ip 를 확인하기 위해 로드밸런서 포트를 하나 만들어준다.

- sts-lb.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sts-chk-hn
spec:
  replicas: 3
  serviceName: sts-svc-domain #statefulset need it
  selector:
    matchLabels:
      app: sts
  template:
    metadata:
      labels:
        app: sts
    spec:
      containers:
      - name: chk-hn
        image: sysnet4admin/chk-hn
---
apiVersion: v1
kind: Service
metadata:
  name: sts-svc
spec:
  selector:
    app: sts
  ports:
    - port: 80
  type: LoadBalancer

 

로드밸런싱과 확인을 위한 야물 파일도 실행시켜준다

- sts-svc-domain-headless.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sts-chk-hn
spec:
  replicas: 3
  serviceName: sts-svc-domain #statefulset need it
  selector:
    matchLabels:
      app: sts
  template:
    metadata:
      labels:
        app: sts
    spec:
      containers:
      - name: chk-hn
        image: sysnet4admin/chk-hn
---
apiVersion: v1
kind: Service
metadata:
  name: sts-svc-domain
spec:
  selector:
    app: sts
  ports:
    - port: 80
  clusterIP: None

 

위와 같이 나오면 준비 완료

 

실험1. nslookup으로 실행시 정상적으로 나오는지 확인

정상적으로 쿼리 수신

 

실험2. pod를 A레코드 도메인으로 사용하면 정상적으로 나오는지 확인

다른 ip로 쿼리 수신 확인

 

 

실험3. 로드 밸런싱 되어 있는 ip를 검색하면 다른 결과를 출력 하는 지 확인

 

같은 IP를 넣어도 다른값으로 출력 확인

 

결론

설명한 내용과 같이 클러스터 ip를 사용하지 않고 headless를 사용한다면 내부에서 검색할때 도메인을 통해 연결이 가능하며 다른 파드들또한 각각의 연결이 가능하다.

728x90

'K8s' 카테고리의 다른 글

인그레스(Ingress)  (0) 2024.03.18
엔드포인트  (0) 2024.03.18
Loadbalancer  (0) 2024.03.08
NodePort  (0) 2024.03.08
ExternalName  (0) 2024.03.08