FKS Service 구성하기 (Configure FKS Services)
Fly Kubernetes 클러스터에서 애플리케이션을 노출하는 Kubernetes Service를 구성하는 방법을 알려드려요. ClusterIP와 LoadBalancer Service를 만들고, 커스텀 어노테이션으로 연결 핸들러, TLS 옵션, 동시성 제한을 설정하는 방법도 다뤄요.
Fly Kubernetes는 비공개 베타(closed beta) 상태이며 중요 프로덕션 사용에는 권장되지 않습니다. 문제를 보고하거나 피드백을 제공하려면 [beta@fly.io](mailto:beta@fly.io)로 이메일을 보내 주세요.Kubernetes Service는 클러스터에서 실행 중인 애플리케이션을 노출해요. Fly Kubernetes는 ClusterIP와 LoadBalancer Service를 지원해요.
서비스 구성 파일로 Service를 만들 수 있어요. 다음은 ClusterIP 서비스 예시예요:
apiVersion: v1
kind: Service
metadata:
name: fksdemo-service
spec:
selector:
app: fksdemo
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
kubectl을 사용해 서비스를 만드세요:
> kubectl apply -f service.yaml
서비스를 보려면:
> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP fdaa:3:dde8:0:1::3a <none> 443/TCP 32h
fksdemo-service ClusterIP fdaa:3:dde8:0:1::3b <none> 80/TCP 11s
출처: 문서
본문
Service를 공개적으로 노출하기
Service는 LoadBalancer 유형의 Service로 공개 인터넷에 노출할 수 있어요.
apiVersion: v1
kind: Service
metadata:
name: fksdemo-service-public
spec:
selector:
app: fksdemo
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
인터넷을 통해 Service에 접근하는 데 사용하는 도메인 이름과 IP 주소는 kubectl로 찾을 수 있어요. 아래 출력에서 값은 EXTERNAL-IP 열 아래에 있어요.
> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP fdaa:3:dde8:0:1::3a <none> 443/TCP 32h
fksdemo-service ClusterIP fdaa:3:dde8:0:1::3b <none> 80/TCP 26m
fksdemo-service-public LoadBalancer fdaa:3:dde8:0:1::3c fksdemo-service-public.svc.fks-default-vz5dlqz7v4ylrnpq.fly.dev,2a09:8280:1::31:ab8:0,137.66.25.254 80/TCP 8s
Fly.io 연결 핸들러 (Connection Handlers)
Fly.io 연결 핸들러는 연결이 애플리케이션에 도달하기 전에 수정해요. 연결 핸들러에 대해 자세히 알아보기.
연결 핸들러는 Service 객체에 대한 커스텀 어노테이션으로 지원돼요. 어노테이션의 형태는 다음과 같아요:
"service.fly.io/<exposed port name/number>-handlers": "<handler1,handler2,...handlerN>"
아래 예시는 포트 443에 HTTP와 TLS 핸들러를 추가해요.
apiVersion: v1
kind: Service
metadata:
name: fksdemo-service
annotations:
"service.fly.io/https-handlers": "http,tls" # can replace https with 443
spec:
selector:
app: fksdemo
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
- name: https
protocol: TCP
port: 443
targetPort: 8080
TLS 옵션
TLS 옵션은 TLS 연결 핸들러가 있는 서비스의 TLS 설정을 구성하는 데 사용돼요. Fly의 엣지(edge)는 이 설정을 사용해 여러분의 애플리케이션에 대한 TLS를 종료해요. 자세한 내용은 문서를 참조하세요.
TLS 옵션은 커스텀 어노테이션을 사용해 설정돼요. 각 설정당 하나씩, 어노테이션은 3개가 있어요:
service.fly.io/<exposed port name/number>-tls-alpn- 클라이언트와 협상할 ALPN을 설정해요. 값은 쉼표로 구분해야 해요.service.fly.io/<exposed port name/number>-tls-versions- 허용할 TLS 버전을 설정해요. 값은 쉼표로 구분해야 해요.service.fly.io/<exposed port name/number>-tls-default-self-signed- true이면 인증서가 없을 때 자체 서명 인증서를 제공해요.
TLS 옵션의 가장 흔한 사용 사례는 gRPC를 지원하는 것이에요. 예를 들어:
apiVersion: v1
kind: Service
metadata:
name: fksdemo-service
annotations:
"service.fly.io/https-handlers": "tls"
"service.fly.io/https-tls-alpn": "h2"
spec:
selector:
app: fksdemo
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
- name: https
protocol: TCP
port: 443
targetPort: 8080
동시성 제한
동시성 제한은 애플리케이션의 부하를 제한하는 데 사용돼요. 기본적으로 소프트 제한은 20, 하드 제한은 25로 설정돼요. 동시성 제한에 대해 자세히 알아보기.
이들은 커스텀 어노테이션을 사용해 Service에 구성할 수 있어요. 제한을 구성하는 데 사용되는 어노테이션은 3개예요:
service.fly.io/concurrency-kind- 동시성을 측정하는 데 사용되는 메트릭을 설정해요service.fly.io/concurrency-limit-soft- 동시성 소프트 제한을 설정해요service.fly.io/concurrency-limit-hard- 동시성 하드 제한을 설정해요
아래는 Service에서 이를 설정하는 예시예요
apiVersion: v1
kind: Service
metadata:
name: fksdemo-service
annotations:
"service.fly.io/concurrency-kind": "connections"
"service.fly.io/concurrency-limit-soft": 20
"service.fly.io/concurrency-limit-hard": 25
지원되지 않는 것
현재 우리는 다음을 지원하지 않아요:
- NodePort Service
- UDP 프로토콜