베하~! BTC_녹차공원 팀의 민물공원 입니다.
이번주는 Ingress에 대해 알아보겠습니다!
Ingress
일반적으로 네트워크에서는 Ingress와 Egress로 트래픽을 구분해요.
Ingress는 외부에서 내부 서버로 들어오는 네트워크 트래픽을,
Egress는 내부 서버에서 외부로 나가는 트래픽을 의미한답니다.
쿠버네티스에서도 Ingress라고 하는 리소스가 존재하는데요. 쿠버네티스의 Ingress는 외부에서 쿠버네티스 클러스터 내부로 들어오는 네트워크 트래픽을 어떻게 처리할지 정의한답니다.
쿠버네티스에서 실행중인 Deployment와 Service에 접근하기 위한 외부 요청을 처리하는 리소스들이 있는데요. NodePort, ExternalIP, Ingress 등이 있습니다.
NodePort와 ExternalIP의 경우, Layer 4 (TCP,UDP) 에서의 요청들을 처리하지만 Ingress는 Layer 7 (Application) 에서의 요청들을 처리할 수 있어요. 이렇기 때문에 Ingress는 로드 밸런싱, TLS/SSL 인증서 처리, HTTP 라우팅 등을 자세하게 정의할 수 있답니다.
Ingress Controller
쿠버네티스에서 Ingress를 사용하기 위해서는 두 가지가 필요해요. Yaml 파일로 정의되는 ingress, Ingress 규칙이 적용될 Ingress Controller예요.
Yaml 파일로 Ingress를 생성해도 아무 일이 일어나지 않는답니다. Ingress 규칙을 단순하게 선언했을 뿐 외부 요청을 받아들이는 실제 서버가 아니기 때문이예요. 이때, Ingress Controller라는 서버 컨테이너에 적용되어야만 외부로부터 네트워크 요청을 수신했을 때, Ingress 규칙에 기반해 이 요청을 어떻게 처리할지를 결정합니다.
Ingress 실습
이번 실습도 Killercoda 에서 따라해보아요.
ing-internal 이라는 네임스페이스에 ping 이라는 ingress 설정을 해볼거예요.
5678 포트의 /hello 경로로 라우팅해볼 예정입니다.
먼저 환경구성을 해보아요.
ing-internal 네임스페이스를 생성합니다.
kubectl create ns ing-internal
Deployment와 SVC 를 생성합니다.
- Deployment
k apply -f- <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: hello
name: hello
namespace: ing-internal
spec:
replicas: 1
selector:
matchLabels:
app: hello
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: hello
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 5678
name: http
protocol: TCP
resources: {}
status: {}
EOF
- SVC
k apply -f- <<EOF
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: hello
name: hello
namespace: ing-internal
spec:
ports:
- port: 5678
protocol: TCP
targetPort: 5678
name: hello
selector:
app: hello
type: NodePort
status:
loadBalancer: {}
EOF
ingress의 yaml 파일을 생성할거예요.
vi ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
kubectl create -f ingress.yaml
이제 정상적으로 트래픽이 전송되는지 확인해보아요!
kubectl get pods -n ing-internal -o wide
kubectl get nodes -o wide
kubectl get svc hello -n ing-internal
curl -kL <INTERNAL_IP>/hello
Ingress 성공 !!
이렇게 오늘은 쿠버네티스의 Ingress 에 대해 알아보았는데요.
다음번에는 더 흥미로운 주제로 찾아뵙겠습니다.
이상 BTC_녹차공원 팀이였습니다!
베빠~!
'INFRA > DevOps' 카테고리의 다른 글
[DevOps]EC2 Ubuntu에 Jenkins 설치 (0) | 2023.08.30 |
---|---|
[K8S] NodeSelector (0) | 2023.08.29 |
[DevOps] CI/CD 개념 및 도구 설명 (0) | 2023.08.18 |
[K8S] Service (0) | 2023.08.01 |
[K8S] NetworkPolicy (0) | 2023.08.01 |
댓글