์ด ๊ธ์ Kubernetes Best Practice๋ฅผ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๊ณผ ์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํ ๊ธ์ ๋๋ค.๋ชจ๋ ๋ด์ฉ์ ์ฑ ์ ํฌํจ๋์ด ์๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฑ ์ ๊ตฌ๋งคํด์ ์ฝ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ต๊ทผ ์๋น์ค ๋ฉ์์ ๋ํด ์์๋ณด๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค์๋ ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ด์์ต๋๋ค. ์ด์ ๋ํ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋ ๋งํ ์ฑ ์ ๋ฐ๊ฒฌํด์ ์ฝ์ด๋ณด๊ณ ์ ํฉ๋๋ค.
์ด๋ฒ ์ฅ์์๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ธ๋ถ ์๋น์ค๋ฅผ ํตํฉํ๋ ์ํฉ์ ๋ํ์ฌ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ์ด์๋๋ ๋๋ถ๋ถ์ ์๋น์ค๋ VM ํน์ ๋ฌผ๋ฆฌ ๋จธ์ ์์ ์คํ๋๋ ์๋น์ค์ ์ ๊ทผํ๊ฑฐ๋, ๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์ค์ ์กด์ฌํ๋ ์๋น์ค์ ์ฐ๊ฒฐ๊ดผ ์๋ ์์ต๋๋ค.
์ธ๋ถ ์๋น์ค ์ฌ์ฉ
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ํฉ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ์ธ๋ถ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ํนํ, ์จํ๋ ๋ฏธ์ค๋ก ๊ตฌ์ถ๋์๋ ์๋น์ค๋ฅผ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒฝ์ฐ๊ฐ ์ด์ ํด๋นํฉ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ์ธ๋ถ ์๋น์ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋น์ค๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ์๋น์ค๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์ฒ๋ผ ๊ฒ์๋๊ธฐ ์ํด์๋ ์ฟ ๋ฒ๋คํฐ์ค DNS๋ฅผ ์ฌ์ฉํด ์๋น์ค๋ฅผ ๊ฒ์ํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ณ ์ ๋ IP๋ฅผ ๊ฐ์ง๋ ์๋น์ค
๊ณ ์ ๋ IP๋ฅผ ๊ฐ์ง๋ ์๋น์ค์ ๊ฒฝ์ฐ, Selector๊ฐ ์๋ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํด๋ฌ์คํฐ DNS๋ฅผ ํตํด ๊ฒ์๋๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋น์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
ํด๋น ์๋น์ค์ ๋ํ Endpoint๋ก ์ธ๋ถ ์๋น์ค์ IP๋ฅผ ๋งคํํ ์ ์์ต๋๋ค.
Endpoint.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: 192.0.2.42
ports:
- port: 9376
๋์ ์ธ IP๋ฅผ ๊ฐ์ง๋ ์๋น์ค
ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ฐฐํฌ๋์ด์๋ ์๋น์ค์ ๊ฐ์ด ๋์ ์ธ IP๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋น์ค์ ๊ฒฝ์ฐ์๋ ์์ ๋ฐฉ๋ฒ์ฒ๋ผ IP๋ฅผ ์ง์ ํด์ค ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ CNAME ๋ ์ฝ๋ ๊ธฐ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. CNAME ๋ ์ฝ๋๋ DNS ์ฃผ์์ ์๋ฒ์ IP๊ฐ ์ง์ ๋งคํ๋๋ A ๋ ์ฝ๋์๋ ๋ฌ๋ฆฌ ๋ ๋ค๋ฅธ DNS ์ฃผ์๋ก ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
NAME TYPE VALUE
--------------------------------------------------
bar.example.com. CNAME foo.example.com.
foo.example.com. A 192.0.2.23
์ฆ, ์๋น์ค๊ฐ ๋ค๋ฅธ DNS ์ฃผ์๋ก ๋งคํ๋๋ CNAME ๋ ์ฝ๋ ์๋น์ค๋ฅผ ์์ฑํ์ฌ ๋์ ์ผ๋ก IP์ฃผ์๊ฐ ๋ณํ๋ ์ธ๋ถ์๋น์ค์ ์์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ ์์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: prod
spec:
type: ExternalName
externalName: my.database.example.com
์ธ๋ถ DNS๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํด์ํ ์ ์๋ ๊ฒฝ์ฐ
์ธ๋ถ DNS ์ด๋ฆ์ด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋คํธ์ํฌ ๋ฒ์๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํด์ํ ์ ์์ง๋ง, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ DNS ์ด๋ฆ์ ๋ณํํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ฟ ๋ฒ๋คํฐ์ค DNS์ ์ค์ ์ ๋ณ๊ฒฝํด์ค์ผ ํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด v1.12.0 ์ดํ๋ถํฐ kube-dns๊ฐ ์๋ CoreDNS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ์ค์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. CoreDNS ์๋ฒ๋ kube-system ๋ค์์คํ์ด์ค์ coredns๋ผ๋ ConfigMap์ ํตํด DNS ์๋ฒ ์ค์ ์ธ Corefile์ ๊ตฌ์ฑํฉ๋๋ค. ์ธ๋ถ DNS ์๋ฒ์ ํต์ ํ๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
cache 30
loop
reload
loadbalance
forward . 172.16.0.1
}
consul.local:53 {
errors
cache 30
forward . 10.150.0.1
}
์ฌ๊ธฐ์ forward์ consul.local์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- consul.local : ๋ง์ฝ 10.150.0.1์ ์์นํ Consul DNS ์๋ฒ๊ฐ ์๊ณ , ์ด์ ๋ํด ์ ๋ฏธ์ฌ๊ฐ .consul.local์ธ ๊ฒฝ์ฐ DNS ์กฐํ๋ฅผ Consul ์๋ฒ์์ ์ํํ๋๋ก ์ง์ ํฉ๋๋ค.
- forward : ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ฌ์คํฐ ๋ด๋ถ์ DNS์์ ์ฐพ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ์ฌ์ ์ ์ ์๋ /etc/reslov.conf์์ ์ฐพ๊ฒ๋ฉ๋๋ค. ํ์ง๋ง ์ธ๋ถ DNS ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ (์์ ์์ ์์๋ 172.16.0.1์ด๋ผ๊ณ ๊ฐ์ ) forward์ ํด๋น DNS ์๋ฒ ์ฃผ์๋ฅผ ๋ช ์ํจ์ผ๋ก์จ ์ธ๋ถ DNS ์๋ฒ์ ํต์ ํ ์ ์์ต๋๋ค.
์๋น์ค ๋ ธ์ถ
ํด๋ฌ์คํฐ ๋ด๋ถ์์ ์ธ๋ถ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ๋ถ์์ ํด๋ฌ์คํฐ ๋ด๋ถ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ธ๋ถ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฟ ๋ฒ๋คํฐ์ค Pod๊ฐ์ ๋ผ์ฐํ ์ค์ ์ด ํ์ํฉ๋๋ค.
๋ด๋ถ ๋ก๋๋ฐธ๋ฐ์ ์ฌ์ฉ (ํด๋ผ์ฐ๋)
๊ฐ์ฅ ์์ฌ์ด ๋ฐฉ๋ฒ์ ๋ด๋ถ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ฐ๋ ํ๋ก๋ฐ์ด๋๋ ๋ก๋ ๋ฐธ๋ฐ์ ํ์ ์ ์๋น์ค๋ฅผ ํตํด ์ธ๋ถ ํธ๋ํฝ์ ํด๋ฌ์คํฐ Pod์ ๋ ธ์ถํฉ๋๋ค. ํ์ง๋ง VPC ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ์๋น์ค์ ๊ฒฝ์ฐ ์ธ๋ถ๋ก ๋ ธ์ถํ๋ ๊ฒ์ ๋ณด์์ ์ํ์ด ์กด์ฌํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ด๋ถ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ์ฌ VPC์ ํ ๋น๋๋ ๋ด๋ถ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ค์ ํจ์ผ๋ก์จ VPC์๋ง ๋ ธ์ถํ ์ ์์ต๋๋ค.
ํด๋ผ์ฐ๋ ํ๋ก๋ฐ์ด๋์ ๋ฐ๋ผ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- AWS : service.beta.kubernetes.io/aws-load-balancer-internal: "true" ์ด๋ ธํ ์ด์ ์ถ๊ฐ
- GCP : networking.gke.io/load-balancer-type: "Internal" ์ด๋ ธํ ์ด์ ์ถ๊ฐ
NodePort ์ฌ์ฉ (์จํ๋ ๋ฏธ์ค)
์จํ๋ ๋ฏธ์ค์ ๊ตฌ์ถ๋ ์๋ฒ์ ๊ฒฝ์ฐ์๋ ๋ด๋ถ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ๋ ธ๋์ ํด๋น ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ๋ NodePort ํ์ ์ ์๋น์ค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํด๋ฌ์คํฐ ์ธ๋ถ์์๋ node-ip:port ํํ๋ก ์๋น์ค๋ฅผ ๋ ธ์ถํ ์ ์์ต๋๋ค. ๋ํ, ๊ฐ์ IP๋ฅผ ๊ฐ์ง๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๊ตฌ์ถํด ์๋น์ค๋ฅผ ๋ ธ์ถํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
'๐ Book Review > ๐ Kubernetes Best Practice' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes Best Practice] 10. ํ๋์ ์ปจํ ์ด๋ ๋ณด์ (0) | 2021.03.23 |
---|---|
[Kubernetes Best Practice] 9. ๋คํธ์ํน, ๋คํธ์ํฌ ๋ณด์, ์๋น์ค ๋ฉ์ (0) | 2021.03.05 |
[Kubernetes Best Practice] 8. ๋ฆฌ์์ค ๊ด๋ฆฌ (0) | 2021.03.01 |
[Kubernetes Best Practice] 6. ๋ฒ์ , ๋ฆด๋ฆฌ์ค, ๋กค์์ (0) | 2021.03.01 |
[Kubernetes Best Practice] 5. ์ง์์ ํตํฉ, ํ ์คํธ, ๋ฐฐํฌ (0) | 2021.02.25 |
๋๊ธ