- pod 기반의 서비스를 제공한다고 하면 pod 의 이름이 랜덤하게 생성되고 바뀜
- 서비스는 LB 역할을 함.
- 서비스는 LB - L4의 역할을 한다
- Static IP 와 Port 를 클라이언트에 제공하여 내 외부에서의 접근을 허용
- API server 를 감시하며 서비스의 endpoint 변경사항을 감지한다
- 각 노드의 kube proxy 에서 처리
- 버전에 따라 몇가지 mode 를 지원

iptables
- iptables : 방화벽, NAT 기능 제공, 룰 등을 적용
- Client -> iptable (룰 기반으로 분배)
- iptables를 통해 성능을 개선한다.
Service 와 DNS Record
- kube-system 에 dns 기반으로 정보가 올라온다.
- A레코드에 해당 : ClusterIP, NodePort, LB
- CNAME 레코드 : ExternalName
- SRV : Headless
Service Controller 시나리오
1. apply.yaml 명세서 작성
apiVersion: v1
kind: Service # Service로 생성
metadata:
name: app1
spec:
selector:
svc: app1
ports:
- port: 80
targetPort: 80
2. app1-pod.yaml 명세서 작성
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
svc: app1 #service와 일치시켜 연결한다
spec:
containers:
- name: app1-container
image: nasamjang02/app:v1
3. client-pod.yaml 명세서 작성
apiVersion: v1
kind: Pod
metadata:
name: client-pod
spec:
containers:
- name: c1
image: rosehs00/app:k8s
command: [ 'sh','-c','sleep 3600' ]
nodeSelector:
nfs: node1
4. 생성 및 확인
kubectl create -f svc
kubectl exec client-pod -it -- /bin/bash #@client-pod에서 접근
nslookup app1 #@서비스 객체의 이름:app1
root@ip-172-31-4-27:~# kubectl exec client-pod -it -- /bin/bash
root@client-pod:/# nslookup app1
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: app1.default.svc.cluster.local
Address: 10.104.31.130
nslookup app1.default.svc.cluster.local
root@client-pod:/# nslookup app1.default.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: app1.default.svc.cluster.local
Address: 10.104.31.130
curl app1 #@ curl 을 통해 접속
curl app1.default.svc.cluster.local
root@client-pod:/# curl app1
This is app v1 test…
root@client-pod:/# curl app1.default.svc.cluster.local
This is app v1 test…
'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글
Pod의 Resource 관리 (0) | 2020.12.03 |
---|---|
Ingress Controller (0) | 2020.12.03 |
Job/CronJob Controller (0) | 2020.12.03 |
DaemonSetController (0) | 2020.12.03 |
Scheduler (0) | 2020.12.02 |