K8s 네트워크는 대부분의 클러스터들과 내부에서 동작하는 애플리케이션들이 외부와 통신하기 때문에 중요하다.
K8s 클러스터에서 동작하는 서비스가 공용으로 접속할 수 있게 직접적으로 노출 되어있으면 관리, 보안 측면에서 좋지 않다.
일반적으로, 공용 액세스를 허용하는 전용 서비스를 노출하고 클러스터에서 호스팅되는 올바른 대상 서비스로 요청을 라우팅할 수 있다. Ingress
와 Ingress controller
가 그 역할을 한다.
Ingress
는 클러스터 외부의 HTTP 및 HTTPS 경로를 클러스터 내 서비스에 노출한다. 트래픽 라우팅은 Ingress에 정의된 rule에 의해 된다.
Ingress
는 수신자로서 네트워크 트래픽을 제어한다. 수신자는 게스트가 건물에 들어갈 수 있는지 여부와 게스트의 요청에 따라 게스트가 어디로 가야 하는지(어느 방 또는 사무실)를 확인한다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
labels:
app: test
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath # 해당 경로에 들어온 요청을 어느 서비스로 전달할지
pathType: Prefix
backend:
service:
name: test # 해당 서비스로 전달
port:
number: 80
가장 중요한 annotation은 kubernetes.io/ingress.class: nginx
이다. Ingress rule을 이행할 Ingress Controller를 명시한다.
Ingress의 rule은 Ingress Controller 에서 수행된다. 즉 Ingress Controller 없이 ingress만으로 동작할 수 없다.