
*서비스 타입 4가지
-ClusterIP (default) : Virtual-IP 생성해서 단일 진입점을 만듬.(lable이 동일한 파드 들을 묶음)
IP범위는 10.x.x.x/12 로 할당됨. IP는 클러스터 내부에서만 사용가능함.
-NodePort : IP가 생성 된 후 워크노드에 외부에서 접속 가능 하도록 포트 예약
-LoadBalancer : AWS, Azure 등 오픈스택에 적용.
-ExternalName : 클러스터 안에서 외부에 접속할때 사용할 도메인을 등록해서 사용하도록.( DNS )
⇒default ClusterIP 확인 해보면 10.96.x.x ⇒ 새로 생성한것으로 변경 접속 해보기

app: "webui" 라벨을 가진 파드를 배포
- vim deploy-nginx.yaml
- Deployment를 정의하는 yaml 파일 작성
( Deployment는 "app: webui" 라벨을 가진 파드를 선택하도록 지정 )
- kubectl create -f deploy-nginx.yaml
⇒ IP생성 2. clusterip-nginx.yaml 생성 / 실행
clusterIP 서비스 설정
- vim clusterip-nginx.yaml
- 쿠버네티스의 ClusterIP 서비스를 정의하는 yaml파일 작성
( 서비스의 clusterIP는 "10.100.100.100"으로 지정되어 있으며,
이는 서비스에 할당된 가상 IP 주소를 나타냄 )
( 이 서비스는 "app: webui"라벨을 가진 파드를 대상으로 선택하도록 지정 )
( 포트 부분에서는 TCP 프로토콜을 사용하며, 포트 80에서 서비스를 노출 )
- kubectl create -f clusterip-nginx.yaml
[root@master ~]# kubectl get svc ⇒ 생성된것 확인 및 접속
[root@master ~]# curl 10.100.100.100
⇒IP, Port, EndPonit IP(노드IP) 확인

생성된 서비스 확인
- 서비스 확인 ( kubectl get service )
- ClusterIP 서비스를 자세하게 확인
( Endpoints의 IP: pods의 IP, kubectl describe service clusterip-service )
[root@master ~]# curl 10.100.100.100 접속을 하면 1,2,3 중 누구에게 접속했는지 확인
동작중인 컨테이너 접속 후 index.html파일 수정 POD-1, POD-2, POD-3 각각 수정하고
다시 접속 curl 10.100.100.100

curl 10.100.100.100으로 접속했을 때 어떤 pods인지 구분
- Pod 1, 2, 3에 접속해서 html 파일 수정 ( echo "POD-1" > /usr/share/nginx/html/index.html )
- 다시 접속 curl 10.100.100.100 하면 랜덤으로 열림
*파드 개수를 5개로 늘리고(scal) EndPoint IP 확인 하고 접속 해보기
⇒ 모두 삭제
deployment로 POD 개수를 5개 늘리기
- kubectl describe service clusterip-service
- Endpoints IP가 늘어나는 것을 확인
.포트범위 : 30000 ~ 32767(2진수) 를 사용함.
.ClusterIP 생성 후 포트를 예약해서 사용.

⇒ deploy-nginx.yaml 실행해서 nginx를 노드에 설치
⇒ nodeport-nginx.yaml 파일 생성 하고 실행 하고 포트 확인 까지
app: "webui" 라벨을 가진 파드를 배포
- vim deploy-nginx.yaml
- Deployment를 정의하는 yaml 파일 작성
( Deployment는 "app: webui" 라벨을 가진 파드를 선택하도록 지정 )
- kubectl create -f deploy-nginx.yaml
nodeport 서비스
- vim nodeport.yaml
- nodeport를 설정하는 yaml 파일 생성 ( "NodePort" 유형으로 설정 )
( 클러스터 내에서의 IP 주소는 "10.100.100.200"이며, )
( "webui" 앱을 선택하기 위한 레이블 셀렉터가 지정 )
( 이는 클러스터 내부에서 사용되며, 외부로 노출하기 위한 노드 포트는 30200으로 설정 )
- kubectl create -f nodeport.yaml
- kubectl get svc로 서비스 확인
⇒ Node1, Node2 에서도 포트 30200이 등록 되었는지 확인
노드의 포트번호 확인
- curl 192.168.10.100:30200 으로 접속 확인
- netstat -napt | grep 30200 로 포트번호 확인
⇒ load-nginx.yaml 파일 실행 하고 동작 확인

로드 밸런서 설정
- vim load-nginx.yaml
- 로드 밸런서 내용을 지정하는 yaml 파일 작성 ( "LoadBalancer" 유형으로 설정 )
- kubectl create -f load-nginx.yaml
- "AWS Load Balancer Controller"와 같은 도구를 사용하여 외부 로드 밸런서를 생성하고 Kubernetes 서비스와 연결 가능
⇒ 파일 생성 및 실행

#kubectl create -f external.yaml

⇒ 실행을 하면 external-IP 부분에 도메인이 보여짐.
⇒ 파드하나 실행 해서 테스트 해보기
⇒ 구글의 HTML 이 보여짐.
external name 서비스 설정
- vim external.yaml
- externalName 서비스를 지정하는 yaml 파일 생성
( "externalname-svc"라는 이름을 가지는 ExternalName 타입의 서비스를 생성,
이 서비스는 "google.com"이라는 외부 도메인을 가리킨다 )
( 이 서비스를 사용하면 클러스터 내부의 파드는 "externalname-svc"를 통해
"google.com"으로 라우팅 )
- kubectl create -f external.yaml
- kubectl get svc로 확인
external name를 사용해서 접속
- 마스터에서 kubectl run testpod -it --image=centos:7 /bin/bash 로 접속
- curl externalname-svc.default.svc.cluster.local로 호출
서비스 4가지 타입
https://kubernetes.io/docs/concepts/services-networking/ingress/

-샘플파일의 내용을 토대로 보면 메인페이지, 로그인, 결재시스템
⇒ 묶어서 관리(클러스트IP)
⇒ 외부와 연결
ingress
-인그레스를 통한 인증, 접속, ⇒ 인그레스 컨트롤러가 필요함.
#ingress-basic.yaml ⇒ 구글 드라이브에서 다운받아서 생성하고 실행/
파일 내용
#kubectl apply -f ingress-basic.yaml
ingress.networking.k8s.io/test created

ingress node 연결
- vim ingress-basic.yaml
- ingress node 연결을 지정하는 yaml 파일 작성
( 호스트 foo.bar.com에 대한 경로:
/foos1로 시작하는 모든 요청은 서비스 s1의 포트 80으로 전달,
/bars2로 시작하는 모든 요청은 서비스 s2의 포트 80으로 전달 )
( 호스트 bar.foo.com에 대한 경로:
모든 요청은 /로 시작하며, 이러한 요청은 서비스 s2의 포트 80으로 전달 )
( Ingress를 통해 클러스터 외부에서 내부로의 트래픽을 어떻게 라우팅할지에 대한 규칙을 정의 )
- kubectl create -f ingress-basic.yaml
- kubectl describe ingress test로 확인 ( ingress controller 설치 확인 )
#git clone https://github.com/kubernetes/ingress-nginx.git ⇒ 설치
다시 한번 URL실행
#cd ingress-nginx/deploy/static/provider/cloud
ingress 예제 파일 다운로드 후
- git clone https://github.com/kubernetes/ingress-nginx.git
- cd ingress-nginx/deploy/static/provider/cloud/ 진입
⇒ deploy.yaml 파일 실행 후 파일 수정 366번째 줄 LoadBalancer 를 NodePort로 수정 하고 실행
#kubectl apply -f deploy.yaml

⇒ 현재는 ingress가 설정이 안되서 404 Not Found 메시지가 출력됨.

deploy.yaml 수정
- vim deploy.yaml
- kubectl apply -f deploy.yaml
- type: LoadBalancer를 NodePort로 변경
![]()
- kubectl apply -f deploy.yaml
- kubectl get deployments.apps -n ingress-nginx로 확인
- kubectl get service -n ingress-nginx로 확인
호출
- curl localhost:30655, curl localhost: 30343으로 확인
- 아직 ingress 설정이 끝나지 않아서 error
#kubectl expose -n ingress-nginx deployment ingress-nginx-controller --name s1
service/s1 exposed
#vi /etc/hosts 파일 맨 아래 부분에 도메인 등록
127.0.0.1 foo.bar.com
서비스 등록과 호스트 등록
- 서비스 등록 ( kubectl expose -n ingress-nginx deployment ingress-nginx-controller --name s1 )
- 호스트 등록 ( /etc/hosts 파일 아래에 도메인 등록 )
도메인 접속