일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pod
- kubectl
- nexus proxy
- 서버간 파일전송
- React Native
- 쿠버네티스
- EC2
- aws cli ec2
- kubectl명령어
- docker myql
- linux 파일복사
- jenkins parameter
- k8s
- statefulset
- ELB
- SecurityContextHolder
- private repostiroy
- sql 공유
- amazon ebs
- cli ec2
- Configmap
- 쿠버네티스교과서
- describe-instances
- Ansible
- yaml예시
- amazon ebs활용
- aws cli
- 명령어
- amazon ebs종류
- docker
- Today
- Total
게으름을 위한 부지런한 게으름뱅리' 블로그
[K8S] 쿠버네티스 "Service" yaml 예시 본문
쿠버네티스(Kubernetes)에서의 "서비스(Service)"는 여러 개의 파드(Pod)로 구성된 애플리케이션에 대한 네트워크 서비스를 제공하는 추상화된 개념입니다. 주로 다음과 같은 목적으로 사용됩니다:
1. 내부 네트워크 서비스 제공 : 서비스는 클러스터 내에서 여러 파드에 접근할 수 있는 단일 진입점을 제공합니다. 이를 통해 파드의 IP 주소가 변경되어도 서비스의 DNS 이름을 통해 접근할 수 있습니다.
2. 로드 밸런싱: 여러 개의 파드에 대한 트래픽을 분산하여 로드 밸런싱을 수행합니다. 서비스는 트래픽을 수신하고 이를 백엔드 파드 중 하나에 전달하는 역할을 합니다.
3. 서비스 발견(Discovery): 클라이언트 애플리케이션은 서비스 이름을 DNS로 해석하여 클러스터 내에 있는 특정 애플리케이션을 찾을 수 있습니다.
- ClusterIP : 기본적으로 클러스터 내에서만 접근할 수 있는 서비스입니다.
- NodePort :각 노드의 지정된 포트를 통해 외부에서 접근할 수 있는 서비스입니다.
- LoadBalancer: 클라우드 제공 업체의 로드 밸런서를 사용하여 외부에서 접근할 수 있는 서비스입니다.
- ExternalName: 외부 서비스를 쿠버네티스 내부에서 사용할 수 있도록 DNS 레코드를 제공하는 서비스입니다.
ClusterIP 예시
예시 1: 기본 ClusterIP 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: my-service # 서비스의 이름
spec:
selector:
app: my-app # 라벨 셀렉터: app=my-app인 파드 선택
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
my-service라는 이름의 서비스를 정의합니다. app: my-app 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달합니다.
예시 2: 여러 포트를 가진 ClusterIP 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: multi-port-service # 서비스의 이름
spec:
selector:
app: backend # 라벨 셀렉터: app=backend인 파드 선택
ports:
- name: http # 포트 이름
protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 HTTP 포트
targetPort: 8080 # 파드의 HTTP 포트
- name: https # 포트 이름
protocol: TCP # 포트 프로토콜은 TCP
port: 443 # 서비스가 제공하는 HTTPS 포트
targetPort: 8443 # 파드의 HTTPS 포트
multi-port-service라는 이름의 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. HTTP(80 -> 8080) 및 HTTPS(443 -> 8443) 포트로 들어오는 트래픽을 각각의 파드 포트로 전달합니다.
예시 3: 특정 IP 주소에 대한 ClusterIP 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: internal-service # 서비스의 이름
spec:
selector:
app: internal-app # 라벨 셀렉터: app=internal-app인 파드 선택
clusterIP: 10.0.0.100 # 클러스터 IP 주소 직접 지정
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 8080 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
internal-service라는 이름의 서비스를 정의합니다. app: internal-app 라벨을 가진 파드들을 대상으로 합니다. 클러스터 IP 주소를 직접 지정하고, 포트 8080으로 들어오는 트래픽을 파드의 8080 포트로 전달합니다.
예시 4: 이름이 있는 포트를 가진 ClusterIP 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: named-port-service # 서비스의 이름
spec:
selector:
app: frontend # 라벨 셀렉터: app=frontend인 파드 선택
ports:
- name: http # 포트 이름
protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 HTTP 포트
targetPort: 8080 # 파드의 HTTP 포트
- name: https # 포트 이름
protocol: TCP # 포트 프로토콜은 TCP
port: 443 # 서비스가 제공하는 HTTPS 포트
targetPort: 8443 # 파드의 HTTPS 포트
named-port-service라는 이름의 서비스를 정의합니다. app: frontend 라벨을 가진 파드들을 대상으로 합니다. 이름이 있는 HTTP(80 -> 8080) 및 HTTPS(443 -> 8443) 포트로 들어오는 트래픽을 각각의 파드 포트로 전달합니다.
예시 5: 타임아웃 설정이 있는 ClusterIP 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: timeout-service # 서비스의 이름
spec:
selector:
app: backend # 라벨 셀렉터: app=backend인 파드 선택
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
timeoutSeconds: 5 # 트래픽 처리 타임아웃 설정
timeout-service라는 이름의 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 트래픽 처리 시간이 5초를 초과하면 타임아웃됩니다.
NodePort 예시
예시 1: 기본 NodePort 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: my-nodeport-service # 서비스의 이름
spec:
type: NodePort # 서비스 유형은 NodePort
selector:
app: my-app # 라벨 셀렉터: app=my-app인 파드 선택
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
nodePort: 30080 # 노드 포트 설정 (선택적)
my-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: my-app 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정합니다.
예시 2: 여러 포트를 가진 NodePort 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: multi-port-nodeport-service # 서비스의 이름
spec:
type: NodePort # 서비스 유형은 NodePort
selector:
app: backend # 라벨 셀렉터: app=backend인 파드 선택
ports:
- name: http # 포트 이름
protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 HTTP 포트
targetPort: 8080 # 파드의 HTTP 포트
nodePort: 30080 # HTTP 노드 포트 설정 (선택적)
- name: https # 포트 이름
protocol: TCP # 포트 프로토콜은 TCP
port: 443 # 서비스가 제공하는 HTTPS 포트
targetPort: 8443 # 파드의 HTTPS 포트
nodePort: 30443 # HTTPS 노드 포트 설정 (선택적)
multi-port-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. HTTP(80 -> 8080) 및 HTTPS(443 -> 8443) 포트로 들어오는 트래픽을 각각의 파드 포트로 전달하며, 각각의 노드 포트도 설정합니다.
예시 3: 특정 IP 주소에 대한 NodePort 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: ip-nodeport-service # 서비스의 이름
spec:
type: NodePort # 서비스 유형은 NodePort
selector:
app: internal-app # 라벨 셀렉터: app=internal-app인 파드 선택
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 8080 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
nodePort: 30080 # 노드 포트 설정 (선택적)
ip-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: internal-app 라벨을 가진 파드들을 대상으로 합니다. 포트 8080으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정합니다.
예시 4: 타임아웃 설정이 있는 NodePort 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: timeout-nodeport-service # 서비스의 이름
spec:
type: NodePort # 서비스 유형은 NodePort
selector:
app: backend # 라벨 셀렉터: app=backend인 파드 선택
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
nodePort: 30080 # 노드 포트 설정 (선택적)
timeoutSeconds: 10 # 트래픽 처리 타임아웃 설정
timeout-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정하고 트래픽 처리 시간이 10초를 초과하면 타임아웃됩니다.
예시 5: 외부 IP를 사용한 NodePort 서비스
apiVersion: v1
kind: Service # 쿠버네티스 리소스 종류
metadata:
name: external-nodeport-service # 서비스의 이름
spec:
type: NodePort # 서비스 유형은 NodePort
externalIPs:
- 192.168.1.100 # 외부 IP 주소 설정
selector:
app: frontend # 라벨 셀렉터: app=frontend인 파드 선택
ports:
- protocol: TCP # 포트 프로토콜은 TCP
port: 80 # 서비스가 제공하는 포트
targetPort: 8080 # 파드의 포트
nodePort: 30080 # 노드 포트 설정 (선택적)
external-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. 외부 IP 주소를 192.168.1.100으로 설정하고, app: frontend 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정합니다.
'IT > K8S' 카테고리의 다른 글
[K8S] 클라우드 제공업체별 LoadBalancer yaml 예시 (0) | 2024.07.03 |
---|---|
[K8S] etcd 사용 예시 (0) | 2024.07.01 |
[K8S] K8S에서 공용 Data 사용하기 (StatefulSet yaml 예시 ) (0) | 2024.07.01 |
[K8S] K8S에서 공용 Data 사용하기 (PV와 PVC yaml 예시) (0) | 2024.07.01 |
[K8S] 쿠버네티스 Configmap과 yaml 예시 (0) | 2024.06.30 |