서비스
- Service는 동일한 기능을 제공하는 Pod 그룹에 대한 안정적인 접근 방식을 제공한다.
- Service는 클라이언트가 Pod 그룹을 네트워크에서 사용할 수 있도록 해준다.
서비스 타입
ClusterIP
- Service에 내부 IP를 할당하여 클러스터 내부에서만 접근할 수 있게 한다.
NodePort
- ClusterIP에 기반하며, 각 Node의 지정된 Port를 통해 외부에서 Service에 접근할 수 있게 한다.
- Ports
- NodePort 서비스 생성 YAML
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: MyApp
ports:
- port: 80
targetPort: 80
nodePort: 30007
LoadBalancer:
- LoadBalancer를 사용해 외부 IP를 Service에 할당한다.
- LoadBalancer 서비스 생성 YAML
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: MyApp
ports:
- port: 80
targetPort: 80
nodePort: 30007
ExternalName
- 서비스를 특정 ExternalName을 DNS(example.com)에 매핑하여 Service에 접근할 수 있도록 한다.
- ExternalName 서비스 생성 YAML
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: prod
spec:
type: ExternalName
externalName: example.com
Troubleshoot 케이스
- 서비스가 동작하지 않을 때
- Selector와 Pod 레이블의 매핑 확인
- Service의 port와 targetPort 확인
- kubectl get service 를 실행하여 서비스 실행여부 확인
- kubectl describe service <service-name>을 실행하여 Servcie 내부 정보 확인
- NodePort나 LoadBalancer 접근 문제
- 방화벽이나 보안 그룹 설정 확인
- 지정한 port로 트래픽이 허용되는지 확인
- LoadBalancer 구성 확인