
Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-1
labels:
app: pod
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
Service
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080

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

apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
type: LoadBalancer
NodePort
Node Port의 범위 : 30000~32767


Ip 재생성 시 변경되는 데 여기 ip주소를 headless, dns server가 podA에게 전달하는 형식
DNS SERVER 이용


Headless

기본구조

1-1) Service
apiVersion: v1
kind: Service
metadata:
name: clusterip1
spec:
selector:
svc: clusterip
ports:
- port: 80
targetPort: 8080
1-2) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
svc: clusterip
spec:
containers:
- name: container
image: kubetm/app
1-3) Request Pod
apiVersion: v1
kind: Pod
metadata:
name: request-pod
spec:
containers:
- name: container
image: kubetm/init
kubectl exec request-pod -it /bin/bash
nslookup
nslookup clusterip1
nslookup clusterip1.default.svc.cluster.local
curl
curl clusterip1/hostname
curl clusterip1.default.svc.cluster.local/hostname
headless 구조

2-1) Service
apiVersion: v1
kind: Service
metadata:
name: headless1
spec:
selector:
svc: headless
ports:
- port: 80
targetPort: 8080
clusterIP: None
2-2) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod4
labels:
svc: headless
spec:
hostname: pod-a
subdomain: headless1
containers:
- name: container
image: kubetm/app
Nslookup
nslookup headless1
nslookup pod-a.headless1
nslookup pod-b.headless1
Curl
curl pod-a.headless1:8080/hostname
curl pod-b.headless1:8080/hostname
clusterIp None으로 주기 때문에 IP생성이 안됨
Endpoints, Externalname

endpoints

3-1) Service
apiVersion: v1
kind: Service
metadata:
name: endpoint1
spec:
selector:
svc: endpoint
ports:
- port: 8080
3-2) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod7
labels:
svc: endpoint
spec:
containers:
- name: container
image: kubetm/app
kubectl describe endpoints endpoint1

4-1) Service
apiVersion: v1
kind: Service
metadata:
name: endpoint2
spec:
ports:
- port: 8080
4-2) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod9
spec:
containers:
- name: container
image: kubetm/app
4-3) Endpoint
apiVersion: v1
kind: Endpoints
metadata:
name: endpoint2
subsets:
- addresses:
- ip: 20.109.5.12
ports:
- port: 8080
curl endpoint2:8080/hostname

5-1) Service
apiVersion: v1
kind: Service
metadata:
name: endpoint3
spec:
ports:
- port: 80
Github - Ip Address
nslookup https://www.github.com
curl -O 185.199.110.153:80/kubetm/kubetm.github.io/blob/master/sample/practice/intermediate/service-sample.md
5-2) Endpoint
apiVersion: v1
kind: Endpoints
metadata:
name: endpoint3
subsets:
- addresses:
- ip: 185.199.110.153
ports:
- port: 80
curl -O endpoint3/kubetm/kubetm.github.io/blob/master/sample/practice/intermediate/service-sample.md

6-1) Service
apiVersion: v1
kind: Service
metadata:
name: externalname1
spec:
type: ExternalName
externalName: github.github.io
curl -O externalname1/kubetm/kubetm.github.io/blob/master/sample/practice/intermediate/service-sample.md
yaml
Service
apiVersion: v1
kind: Service
metadata:
name: headless1
spec:
selector: # 생략시 Endpoints 직접 생성해서 사용
svc: headless
ports:
- port: 80
targetPort: 8080
clusterIP: None # headless 서비스
type: ExternalName # ExternalName Service 설정시 사용
externalName: github.github.io # ExternalName사용시 연결 Domain지정
Endpoints
apiVersion: v1
kind: Endpoints
metadata:
name: headless1 # Service의 이름과 동일하게 지정
subsets:
- addresses:
- ip: 20.109.5.12 # Pod의 ClusterIp
ports:
- port: 8080 # Pod의 Container Port
Pod
apiVersion: v1
kind: Pod
metadata:
name: pod4
labels:
svc: headless
spec:
hostname: pod-a # 호스트네임 설정, 생략시 Pod Name이 적용됨
subdomain: headless1 # headless 서비스 사용시 Service의 이름으로 지정
containers:
- name: container
image: kubetm/app