Kubernetes Nginx 인그레스 컨트롤러 생성 및 샘플 애플리케이션에 대한 규칙 생성
외부 세계에 노출하려는 애플리케이션을 생성할 때마다 그 뒤에 있는 애플리케이션으로의 흐름을 제어하는 것이 항상 현명합니다. 이것이 Kubernetes에
Kubernetes Ingress
라는 것이 있는 이유입니다. 그러나 그것은 무엇입니까?쿠버네티스 인그레스
Kubernetes Ingress 클러스터 외부에서 클러스터 내의 서비스로 HTTP 및 HTTPS 경로를 노출할 수 있습니다. 그런 다음 트래픽 라우팅은 인그레스 소스에 정의된 규칙에 의해 제어됩니다.
이 기사에서는 자신만의
Nginx Ingress Controller
생성을 시작하는 방법을 설명합니다. 물론 이것이 유일한 가능성은 아닙니다. so feel free to check other ingress controllers such as Istio, HAProxy, Traefik, ...수신 컨트롤러 사용의 몇 가지 이점:
샘플 Hello World 애플리케이션
컨트롤러를 만들기 전에 간단한 데모 애플리케이션 만들기를 시작하겠습니다. 애플리케이션이 수행하는 유일한 작업은 HTTP 요청을 처리하고 몇 초간 기다린 후 "Hello World"응답을 반환하는 것입니다.
샘플 앱 만들기
Node.js에서 이 애플리케이션을 만들기로 결정했습니다. 따라서
npm
및 node
가 설치되어 있으면 다음 명령을 실행하십시오.npm init -y
npm i express --save
그런 다음 다음 내용이 포함된
index.js
파일을 만들 수 있습니다.const express = require('express')
const app = express()
const port = 3000
app.get('/', async (req, res) => {
console.log('Got request, waiting a bit');
await delay(10 * 1000);
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
const delay = async (timeout = 1000) => {
return new Promise((resolve, reject) => setTimeout(resolve, 1000));
}
용기로 포장
모든 것이 애플리케이션 코드 측면에서 생성되기 때문에 Dockerfile을 생성하여 모든 것을 Docker 컨테이너로 패키징할 수 있습니다.
도커파일
FROM node:latest
WORKDIR /usr/src/app
# Install deps
RUN apt-get update
# Create Certificate
RUN apt-get install ca-certificates
# Install Package.json dependendencies
COPY package.json .
RUN npm install
# Copy Source Code
ADD . /usr/src/app
CMD [ "npm", "run", "start" ]
EXPOSE 3000
다음과 같이 구축할 수 있습니다(사용 사례에 따라 하나 선택).
# Local build (for local use)
# Note: when using minikube, make sure to run `eval $(minikube docker-env)` to build images in minikube context
docker build -t local/node-sample-helloworld .
# Remote build (to push to docker repository)
docker build -t thebillkidy/node-sample-helloworld .
docker push thebillkidy/node-sample-helloworld
Kubernetes에서 실행
빌드가 완료되면 이제 Kubernetes 클러스터에서 실행할 수 있습니다. 이를 위해 배포 YAML 파일을 만듭니다.
kubernetes.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: d-node-sample-helloworld
spec:
selector:
matchLabels:
app: node-sample-helloworld
replicas: 1
template:
metadata:
labels:
app: node-sample-helloworld
spec:
containers:
- name: main
image: thebillkidy/node-sample-helloworld:latest # if local, utilize local/node-sample-helloworld
imagePullPolicy: Always # if local, utilize Never
ports:
- containerPort: 3000
kubectl apply -f kubernetes.yaml
로 적용할 수 있으며 이제 kubectl get deployments -A
를 실행한 후 다음을 표시해야 합니다.NAME READY UP-TO-DATE AVAILABLE AGE
d-node-sample-helloworld 1/1 1 1 37s
Kubernetes는 매일 점점 더 인기를 얻고 있으며 그 이유는 당연합니다! 온프레미스 또는 클라우드 내에서 애플리케이션을 실행할 때 애플리케이션을 이식 가능한 방식으로 보유할 가능성이 높습니다! 준비가 되었을 때 애플리케이션을 확장하거나 버스트 시나리오에 대한 마찰을 제거합니다.
Nginx 인그레스 컨트롤러
이제 간단한 Hello World 애플리케이션이 실행되지만 내부적으로만 사용할 수 있습니다! 지금 우리가 할 수 있는 것은 Kubernetes와 LoadBalancer를 통해 이를 노출하는 것이지만 여기에서 Ingress Controller를 실제로 활용해 봅시다! 이제 이 인그레스 컨트롤러 생성을 시작하겠습니다.
설치
우리가 해야 할 첫 번째 단계는 NGINX 인그레스 컨트롤러를 생성하는 것입니다. 이를 위해 다음 단계를 따를 수 있습니다.
Note: before the
stable/nginx-ingress
chart was utilized. But this is now deprecated!
# ref: https://github.com/kubernetes/ingress-nginx (repo)
# ref: https://github.com/kubernetes/ingress-nginx/tree/master/charts/ingress-nginx (chart)
# 1. Create namespace
kubectl create namespace ingress-nginx
# 2. Add the repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# 3. Update the repo
helm repo update
# 4. Install nginx-ingress through Helm
helm install ingress-controller ingress-nginx/ingress-nginx --namespace ingress-nginx
위의 내용을 실행하고 나면 이제 외부 IP(
kubectl -n ingress-nginx get svc
)를 로드하여 수신 컨트롤러에 액세스할 수 있습니다.Note: when working with Minikube or others, we can utilize
kubectl port-forward svc/ingress-controller-ingress-nginx-controller --namespace ingress-nginx --address 0.0.0.0 8000:80
and access it onhttp://localhost:8000
이제 애플리케이션을 노출할 준비가 되었습니다!
애플리케이션 노출
인그레스 컨트롤러가 생성되면 애플리케이션을 내부적으로 노출해야 합니다.
kubectl expose deployment d-node-sample-helloworld --name svc-node-sample-helloworld
Kubernetes Ingress API에 정의된 대로 트래픽을 라우팅하도록 인그레스 컨트롤러를 구성합니다. YAML 파일 생성:
수신-노드-샘플-helloworld.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-node-sample-helloworld
annotations:
# Target URI where the traffic must be redirected
# More info: https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
spec:
rules:
# Uncomment the below to only allow traffic from this domain and route based on it
# - host: my-host # your domain name with A record pointing to the nginx-ingress-controller IP
- http:
paths:
- path: / # Everything on this path will be redirected to the rewrite-target
backend:
serviceName: svc-node-sample-helloworld # the exposed svc name and port
servicePort: 3000
응모하는 것
kubectl apply -f ingress-node-sample-helloworld.yaml
이제 이것이 적용되면 cURL 요청을 실행하여 애플리케이션에 액세스할 수 있어야 합니다! 그래서 이것을 시도해 봅시다:
# Execute a GET request with the specified host and IP
# Note: the Host should match what is written in spec.rules.host
curl -k -X "GET" -H "Host: my-host" http://YOUR_IP
또는 브라우저에서 열어 http://YOUR_IP으로 이동할 수도 있습니다.
Note: If this is not working, check
kubectl describe ing
and make sure that the configuration is correct
결론
이 기사에서는 Kubernetes용 인그레스 컨트롤러를 설정하는 방법에 대한 데모를 만들었습니다. 이것은 물론 속도 제한 또는 모니터링과 같은 더 많은 작업을 수행하려는 전체 사용 사례 체인의 작은 단계입니다.
Prometheus를 통해 방금 설정한 것을 모니터링하고 Grafana에서 모든 것을 시각화할 수 있는 방법에 대해 자세히 설명합니다.
Note: feel free to check the original post at my blog https://xaviergeerinck.com
Reference
이 문제에 관하여(Kubernetes Nginx 인그레스 컨트롤러 생성 및 샘플 애플리케이션에 대한 규칙 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/xaviergeerinck/creating-a-kubernetes-nginx-ingress-controller-and-create-a-rule-to-a-sample-application-4and텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)