목차
1) Exposing Kubernetes Ports
2) Kubernetes Mgmt Techniques
Exposing Kubernetes Ports
이 섹션은 services에 관한 것입니다.
deployments, pods을 다루고 지속적인 endpoint를 만드는 것을 다룹니다.
swarm에서는 뭔가를 배포할 때 service라는 교과서적인 방법이 있습니다.
하지만 쿠버네티스는 좀 더 다양한 방법이 있습니다.
이를 위해 이번 챕터에서는,
- Learning SErvice Types
- Creating Service Types
- Service DNS
- 포트 여는 법
들을 배우겠습니다.
Exposing pods with services
(Defining the Four service types)
-exposing pods는 결국 외부와 커넥션을 가능하도록 만드는 작업이다.
kubectl expose
명령어는 이미 만들어진 pods의 service를 만든다.
- service is an endpoint that is consistent
- service is a stable address for pod(s)
- 서비스를 통해 클러스터 안/밖에서 access할 수 있습니다.
- CoreDNS allows us to resolve services by name
4종류의 service type
-ClusterIP
-NodePort
-LoadBalancer
-ExternalName
1. ClusterIP
- 디폴트 서비스 타입이다.
- 클러스터 내에서만 접근 가능하다.
- Pods can reach service on apps port number
- swarm에선 자동으로 만들어지지만, kube에서는
expose
명령으로 직접 만들어줘야한다.
- clusterip는 클러스터 내에서만 유효하다.(방화벽 같은 것도 없다)
2. NodePort
- nodeport는 클러스터 밖과의 통신을 위한 것으로, 노드에 있는 ip를 통해 이루어진다.
-nodeport를 만들면 각각 노드에 High port가 할당된다.
- Port is open on every node's IP
-80번 포트를 사용하지 않는다(?)
-Anyone can connect(if they can reach node)
-other pods need to be updated to this port(?)
-These services are always avaiable in Kubernetes. (무슨말이냐면 그 어떤 회사의 쿠버네티스 제품을 사용해도 다 사용 가능하다는 뜻)
3. LoadBalancer
-클라우드에서 주로 사용되는 타입이다.
-Controls a LB endpoint external to the cluster
-LoadBalancer를 만들면 background에서 ClusterIp와 Nodeport를 만든다. 이렇게 해서 외부와 통신한다(예를들어 aws LB, cloud vendor)
-요건 기본적으로 infrastructure provider가 제공해준다.
-Only available when infra provider gives you a LB(AWS ELB, etc)
4. ExternalName
-잘 안쓰인다.
- inbound트래픽을 처리하는 것과 별 관련 없다.
- adds CNAME DNS record to CoreDNS only
- not used for Pods, but for giving pods a DNS name to use for something outside Jubernetes
Creating a slusterIP service
(exposing our deployments)
kubectl get pods -w
kubectl create deployment/httpenv --image=bretfisher/httpenv
kubectl scale deplyment/httpenv --replicas=5
kubectl expose deployment/httpenv --port 8888
kubectl get service
``
Kubernetes Mgmt Techniques