서비스 리소스
서비스 API 카테고리
서비스 디스커버리와 클러스터 외부에서도 접속이 가능하게 엔드포인트를 제공하는 리소스
목차
클러스터 IP
외부에서 Pod로 통신하기 위해
지정된 ip로 생성이 가능하고, 여러 Pod를 묶어서 로드 밸런싱도 가능하며, 고유한 DNS 이름을 가질 수 있다.
서비스를 하기 위해 ClusterIP라는 개념을 사용하는데, 사용자가 접속할때, ClusterIP를 거치며, ClusterIP는 포트로 사용자의 요청을 확인해 지정한 Pod로 연결해준다.
아래는 클러스터 IP의 기본 코드인데,
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
type: ClusterIP
외부에서 9000포트로 들어오면, Pod의 8080 포트로 연결된다는 의미이다.
클러스터 IP 설정하는방법
확인해보면 80번 포트가 다 아래처럼 되어있다.
crul로 확인해보면 접속된다.
Node port
모든 워커들이 특정 포트를 이용해 접근하도록 설정한다.
포트(30000~32767) 만 사용하여 NordPort의 포트당 하나의 서비스만 사용하여 클러스터의 모든 Pod에 같은 포트가 할당되게 한다.
위의 클러스터 IP에 노드 Port를 지정하면 이런식으로 통신이 된다.
아래의 예시로 보면 yaml 파일을 새로 만들었지만, ClusterIP에 노드 포트를 추가해준것뿐이다.
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
nodePort: 30000 #추가된 노드포트
type: NodePort
Nodeport 설정하기
아래처럼 서비스할 yaml 과 nodeport.yaml 을 만들어주고 실행한다.
실행된것을 아래처럼 확인하고
describe로 확인하면 아래처럼 80번 포트로 배치된 것을 확인할수 있다.
아래로 접속하면 확인할수 있다.
※ 로드밸런서는 기본적으로 ip가 잡히지않아 자체로는 안된다.
아래 파일을 실행해보면
ip가 pending 상태로 유지된다. ( IP가 잡히지않아 기능을 못한다는 의미.)
ExternalName
service가 설정값을 외부의 dns이름으로 변경해서 반환해준다.
Headless Service
클러스터IP가 할당되지 않고, Proxy도 관여하지않아 로드밸런싱또한 관여하지않는다.
인그레스 ( Ingress )
클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙에 대한것을 정리해둔것이다.
부하분산, ssl 종료 같은 가상호스팅을 제공한다
얘는 클러스터 외부에서 내부서비스로 HTTP, HTTPS 경로를 노출한다.
ingress controller 설치방법
아래 명령어로 deployment.yaml 파일을 가져온다.
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml
vi deploy.yaml
아래 30010, 30020 포트로 변경
k create -f deploy.yaml
좀 기다리면 아래처럼 뜬다.
일단 이렇게 두면 controller 세팅은 완료되었다.
그리고 네임스페이스와 세팅하기위해 기본 config 설정을 변경한다.
kubectl config set-context ingress-admin@kubernetes \
--cluster=kubernetes \
--user=kubernetes-admin \
--namespace=ingress-nginx
그리고 유저 변경 후 확인
kubectl config use-context ingress-admin@kubernetes
kubectl config current-context
아래는 테스트용 yaml 파일 두개인데 먼저
서비스용 yaml 파일이다
이를 실행하고 좀 기다리면 아래처럼 확인된다.
그리고 두번째 ingress 설정용 yaml
실행하고 아래처럼 접속해보면 잘뜬다.