-
Kubernetes Nginx Ingress 알아보기Kubernetes 2023. 12. 16. 00:39반응형
- 목차
소개.
Ingress 는 Kubernetes 환경을 외부 네트워크와 연결하는 창구역할을 합니다.
Kubernetes 내부의 Pod 들은 서로의 IP 를 기반으로 통신을 수행하는데요.
Kubernetes 외부에서 특정 Pod 와의 연결은 불가능합니다.
Ingress 는 이러한 소통을 가능하게 하는 Kubernetes 리소스이며,
이번 글에서 Nginx 을 기반으로하는 Nginx Ingress 에 대해서 설명하려고 합니다.Ingress 란 ?
Ingress 는 Kubernetes 외부에서 Kubernetes 내부로의 통신을 가능하게 도와주는 Kubernetes Resource 입니다.
네트워크 관점에서 Ingress 와 Egress 라는 개념이 존재합니다.
Ingress 는 Inbound Network Traffic 을 수용하는 개념이고, egress 는 그 반대입니다.
Kubernetes 의 Pod 들은 Egress Network 는 가능합니다.
반면 Ingress Network 는 단절되어있어 불가능하죠.
그래서 Ingress 라는 Kubernetes Resource 는 이름 그대로 Ingress Network Traffic 을 관리하는 Kubernetes Resource 입니다.
Ingress 는 여러가지 종류가 존재합니다.
흔히 사용되는 Nginx 기반의 Ingress 가 존재하고, 그외에 Traefik, HAProxy Ingress, Contour 등이 있습니다.
Kubernetes 의 Resource 들은 반드시 Controller 가 필요한데요.
이 Controller 의 Reconcile Loop 을 통해서 Self-Healing 또는 Auto-Scaling 등을 가능하게 합니다.
그래서 Deployment, ReplicaSet 등은 Kubernetes Built-in Controller 가 존재합니다.
반면, Ingress 는 Built-in Controller 가 존재하지 않습니다.
왜냐하면 사용가능한 종류가 많습니다. ( Nginx, Traefik, HAProxy Ingress, Contour )
그래서 사용자의 선택에 맡겨집니다.
Ingress Controller 가 생성된다면 본격적으로 Ingress 라는 Kubernetes Resource 를 사용할 수 있게 됩니다.Kubernetes Version Compatibility.
아래는 쿠버네티스와 Ingress Controller 의 버전 호환테이블입니다.
Ingress 를 적용하기 위해서는 Ingress Controller 와 Custon Resource Definition 의 설치가 선행되어야합니다.https://docs.nginx.com/nginx-ingress-controller/technical-specifications/
Technical Specifications | NGINX Ingress Controller
Technical Specifications NGINX Ingress Controller Technical Specifications. Supported NGINX Ingress Controller Versions We recommend upgrading to the latest release of the NGINX Ingress Controller. We provide software updates for the most recent release. W
docs.nginx.com
https://github.com/kubernetes/ingress-nginx
GitHub - kubernetes/ingress-nginx: Ingress-NGINX Controller for Kubernetes
Ingress-NGINX Controller for Kubernetes. Contribute to kubernetes/ingress-nginx development by creating an account on GitHub.
github.com
그리고 Kubernetes 와 호환되는 버전의 nginx-controller 를 선택하시면 됩니다.
저는 Kubernetes 1.24 환경과 호환되는 1.8.4 버전의 nginx-controller 를 사용할 예정입니다.
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.4/docs/examples/static-ip/nginx-ingress-controller.yamlNginx Ingress 적용하기.
아래의 내용은 Local Kubernetes 에서 Ingress 를 생성하는 내용입니다.
참고한 KinD-Ingress 문서 또한 함께 공유드립니다.
https://kind.sigs.k8s.io/docs/user/ingress/#ingress-nginx
kind – Ingress
Ingress This guide covers setting up ingress on a kind cluster. Setting Up An Ingress Controller 🔗︎ We can leverage KIND’s extraPortMapping config option when creating a cluster to forward ports from the host to an ingress controller running on a no
kind.sigs.k8s.io
KinD Kubernetes 클러스터 생성.
cat <<EOF> /tmp/k8s-cluster.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP - role: worker - role: worker - role: worker EOF
kind create cluster \ --name test-cluster \ --image kindest/node:v1.24.0 \ --config /tmp/k8s-cluster.yaml
Nginx Ingress Controller 생성.
먼저 nginx-ingress Namespace 를 생성합니다.
그리고 nginx-ingress-controller 를 생성합니다.
nginx-ingress-controller 는 Deployment 로 관리됩니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl wait --namespace ingress-nginx \ --for=condition=ready pod \ --selector=app.kubernetes.io/component=controller \ --timeout=90s
Pod, Service, Nginx 생성하기.
cat <<EOF> /tmp/node.yaml kind: Pod apiVersion: v1 metadata: name: node labels: app: node spec: containers: - command: - /agnhost - netexec - --http-port - "8080" image: registry.k8s.io/e2e-test-images/agnhost:2.39 name: node --- kind: Service apiVersion: v1 metadata: name: node-service spec: selector: app: node ports: - port: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: node-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - http: paths: - pathType: Prefix path: / backend: service: name: node-service port: number: 8080 --- EOF kubectl apply -f /tmp/node.yaml
아래와 같이 확인이 가능합니다.
반응형'Kubernetes' 카테고리의 다른 글
ArgoWorkflow Parallel Nested Dag 구현하기 ( with Kubernetes ) (0) 2024.01.03 [Kubernetes] Argo Workflows 시작하기 (0) 2023.12.28 Helm 알아보기 (2) 2023.12.11 Kubernetes Custom Resource 알아보기 (0) 2023.12.11 Kubernetes Certificate 알아보기 (0) 2023.12.11