개념
Service는 Pod을 외부에서 접속할 수 있도록 하는 오브젝트이다.
환경구성
deploy.yaml
다음은 예제에 사용된 nginx pod을 3개 생성하는 deployment 파일이다.
컨테이너 생성을 포함하며 pod가 replicas에 의해 3개 생성된다.
labes라는 것을 이용하여 연관관계 생성한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: my-web # 네임스페이스 추가
labels:
app: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14.2
ports:
- containerPort: 80
service.yaml
nginx pod을 외부노출 시켜주는 service.yaml 이다.
해당 pod에 접근하기 위해서는 LoadBalancer로 부여된 IP:PORT로 접근하면된다.
targetport는 pod의 포트로 컨테이너의 포트로 설정해주면 된다.
apiVersion: v1
kind: Service
metadata:
name: my-nginx
namespace: my-web # 네임스페이스 추가
spec:
type: LoadBalancer # 서비스 타입
ports:
- port: 8080 # 서비스 포트
targetPort: 80 # 타켓, 즉 pod의 포트
protocol: TCP
name: http
selector:
app: nginx-pod # label이 nginx인 pod를 service가 select한다(연결한다)
실습하기
service와 pod 연결하기
deployment에 의하여 pod가 replicaset으로 3개 생성되었음에도 불구하고 준비된 service에 할당 되지 않은 화면이다.
현재 잘못된 이름(nginx-where)으로 Service가 pod를 select 하려고 하기때문이다.
service에 pod의 label을 nginx로 선택(selector)을 시켜주면 다음의 그림과 같이 연결시킬 수 있다.
외부 사용자는 해당 IP를 통하여 서비스에 접근할 수 있다.
주의사항
외부접속 시 별도의 접근 라우팅이 필요할 수 있다.
만약에 외부 인터넷에 직접노출 되어있지 않고 최상단에 라우터가 있다면 그 라우터(192.168.0.1)에게 Kubernetes의 Contorol-Plane VIP(192.168.0.207)에게 해당 IP(10.10.0.4)를 질의하도록 라우팅 테이블 설정이 추가 필요하다. 이로서 외부에 10.10.0.4로 포트포워딩 할 시 최상단 라우터는 VIP에게 질의하여 쿠버네티스 안쪽으로 접근이 가능하다.
'기타정보' 카테고리의 다른 글
[정보] pv pvc 트러블슈팅 (0) | 2024.01.26 |
---|---|
[정보] 쿠버네티스(kubernetes) rabbitMQ 헬름차트 yaml 설정 (0) | 2024.01.24 |
[정보] 쿠버네티스 pod Evicted - 하드디스크 부족 (0) | 2024.01.23 |
[정보] ingress-nginx argocd 설정 파일(redirection loop) (0) | 2024.01.23 |
[정보] kubernetes 외부통신 적용(metallb) (0) | 2024.01.18 |