service

1. ๋ช…๋ น์–ด

1) Get

kubectl get service svc-3 -n defalut #service ์กฐํšŒ
# Pod์ด๋ฆ„์ด request-pod์ธ Container๋กœ ๋“ค์–ด๊ฐ€๊ธฐ (๋‚˜์˜ฌ๋• exit)
kubectl exec request-pod -it /bin/bash

2. Type

1) ClusterIp

์„œ๋น„์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์‹ ์˜ ํด๋Ÿฌ์Šคํ„ฐ ip์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ด๋ฅผ ํŒŒ๋“œ์— ์—ฐ๊ฒฐ์‹œ์ผœ ๋†“์œผ๋ฉด ํ•ด๋‹น ip์ฃผ์†Œ๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ๋“œ๋„ ๋ณ„๋„์˜ ip์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ด๋Š” ํœ˜๋ฐœ์„ฑ ip์ฃผ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๋ขฐ์„ฑ์ด ๋–จ์–ด์ง€์ง€๋งŒ ์„œ๋น„์Šค๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ๋†“์œผ๋ฉด ์žฌ์ƒ์„ฑ์ด ๋˜๋”๋ผ๋„ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ip์ฃผ์†Œ๋„ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผ ํ• ์ˆ˜ ์—†์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ๋“œ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ๋†“์•„์„œ ๋ถ€ํ•˜๋ถ„์‚ฐ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    app: pod
  ports:
    - port: 9000
      targetPort: 8080
  type: ClusterIP

type์˜ต์…˜์—์„œ ClusterIP๋Š” ์˜ต์…”๋„ํ•œ ๊ฐ’์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ClusterIp์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ์œ„ yml์€ 9000๋ฒˆํฌํŠธ์˜ ์š”์ฒญ์„ ํŒŒ๋“œ์˜ 8080ํฌํŠธ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ค€๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  lables:
    app: pod
spec:
  continaers:
    - name: container
      image: tmkube/app
      ports:
        - coninaerPort: 8080

์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ip๋กœ ์šด์˜์ž์™€ ๊ฐ™์ด ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ ๋Œ€์‹œ๋ณด๋“œ๋‚˜ ํŒŒ๋“œ์˜ ์„œ๋น„์Šค ์ƒํƒœ ๋””๋ฒ„๊น…ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

2) NodePort

ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ํŠน์ • ํฌํŠธ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์—์„œ ํ• ๋‹น๋œ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ• ๋•Œ ๋…ธ๋“œ๋“ค์ด ํ•ด๋‹น ์„œ๋น„์Šค๋กœ ์—ฐ๊ฒฐ์ด ๋˜๊ณ  ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋œ ํŒŒ๋“œ์—๊ฒŒ ์—ญํ• ์„ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค.

apiVersion: v1
kind: Service
metadata:
  name: svc-2
spec:
  selector:
    app: pod
  ports:
    - port: 9000
      targetPort: 8080
      nodePort: 30000
  type: NodePort

nodePort๋Š” 30000~32767์‚ฌ์ด์˜ ํฌํŠธ์ค‘์— ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ณ  ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ๊ฐ’์ค‘ ํ•œ ๊ฐ’์œผ๋กœ ์ž๋™์œผ๋กœ ์„ค์ •์ด ๋œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์–ด๋–ค ํŠน์ •๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผ์„ ํ•ด ์š”์ฒญ์„ ํ•˜๋”๋ผ๊ณ  ์„œ๋น„์Šค๋Š” 1๋ฒˆ๋…ธ๋“œ๋‚ด์— ์กด์žฌํ•˜๋Š” ํŒŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์„œ๋น„์Šค๊ฐ€ ํŒ๋‹จํ•˜์—ฌ ์ ์ ˆํ•œ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋Š”๋ฐ externalTrafficPolicy: Local ์˜ต์…˜์„ ์ฃผ๋ฉด ํŠน์ • ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•œ ์š”์ฒญ์€ ํ•ด๋‹น ๋…ธ๋“œ๋‚ด์˜ ํŒŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ฆฌ์ ์ธ ํ˜ธ์ŠคํŠธ์— ip๋ฅผ ํ†ตํ•ด์„œ ํŒŒ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๋ณดํ†ต ํ˜ธ์ŠคํŠธip๋Š” ๋‚ด๋ถ€๋ง์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€๋ง์„ ์—ฐ๊ฒฐํ• ๋•Œ๋‚˜ ๋ฐ๋ชจ๋‚˜ ์ž„์‹œ ์—ฐ๊ฒฐ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

3) LoadBalancer

๊ธฐ๋ณธ์ ์œผ๋กœ ๋…ธ๋“œํฌํŠธ์˜ ์˜ต์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋…ธ๋“œ๋“ค ์•ž์— ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ํ•˜๋‚˜ ์ƒ์„ฑ์ด ๋˜๊ณ , ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋ถ€ํ•˜๋ถ„์‚ฐ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ ip์ฃผ์†Œ๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ์™ธ๋ถ€์ ‘์† ip๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” plugin์ด ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ์–ด์•ผ ip์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ๋งŒ์•ฝ aws, google๋“ฑ์„ ํ†ตํ•ด์„œ ๋งŒ๋“ ๋‹ค๋ฉด ํ•ด๋‹น plugin์ด ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ์–ด ip์ฃผ์†Œ๊ฐ€ ํ• ๋‹น ๋œ๋‹ค.

apiVersion: v1
kind: Service
metadata:
  name: svc-3
spec:
  selector:
    app: pod
  ports:
    - port: 9000
      targetPort: 8080
  type: LoadBalancer

์‹ค์ œ์ ์œผ๋กœ ์™ธ๋ถ€์— ์‹œ์Šคํ…œ์„ ๋…ธ์ถœ์‹œํ‚ฌ๋•Œ ๋‚ด๋ถ€ip๋ฅผ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ์™ธ๋ถ€ip๋งŒ์„ ๋…ธ์ถœ ์‹œ์ผœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

3. Objects

1) Headless

cluster ๋‚ด์— dns๊ฐ€ ์กด์žฌํ•˜์—ฌ pod์—์„œ service๋ฅผ ์—ฐ๊ฒฐํ• ๋•Œ service์ด๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ–ˆ์—ˆ๋Š”๋ฐ pod์™€ pod๊ฐ„์˜ ์—ฐ๊ฒฐ๋„ headless์˜ต์…˜์„ ์ด์šฉํ•˜๋ฉด dns์— pod์ด๋ฆ„.service์ด๋ฆ„์˜ ์ด๋ฆ„์œผ๋กœ ํ•„๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ip๊ฐ€ ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— pod๊ฐ„์— ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

#Service
apiVersion: v1
kind: Service
metadata:
  name: headless1
spec:
  selector:
    svc: headless
  ports:
    - port: 80
      targetPort: 8080    
  clusterIP: None
#Pod
apiVersion: v1
kind: Pod
metadata:
  name: pod4
  labels:
    svc: headless
spec:
  hostname: pod-a
  subdomain: headless1
  containers:
  - name: container
    image: kubetm/app

2) Endpoint

kubectl describe endpoints endpoint2  #enpoint ๋ณด๊ธฐ
#Service
apiVersion: v1
kind: Service
metadata:
  name: endpoint2
spec:
  ports:
  - port: 8080
#Pod
apiVersion: v1
kind: Pod
metadata:
  name: pod9
spec:
  containers:
  - name: container
    image: kubetm/app
apiVersion: v1
kind: Endpoints
metadata:
  name: endpoint2
subsets:
 - addresses:
   - ip: 20.109.5.12
   ports:
   - port: 8080

3) ExternalName

์™ธ๋ถ€ ip์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด endpoint๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ‘๊ทผ์„ ํ•˜๋”๋ผ๋„ ์ด ์™ธ๋ถ€ ip๋Š” ๋ณ€๊ฒฝ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— domain์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ๋ฐ ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

apiVersion: v1
kind: Service
metadata:
 name: externalname1
spec:
 type: ExternalName
 externalName: github.github.io

์ถ”๊ฐ€

k8s v1.11 ์ด์ „์—๋Š” kube-dns ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ DNS ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต, ์ดํ›„์—๋Š” CoreDNS๋ฅผ ๋„์ž…ํ–ˆ๋‹ค.(๋ณด์•ˆ๊ณผ ์•ˆ์ •์„ฑ ๋ฌธ์ œ)


Reference

์ธํ”„๋Ÿฐ-๊น€ํƒœ๋ฏผ๋‹˜ ๊ฐ•์˜

k8s ๊ณต์‹๋ฌธ์„œ

Last updated