티스토리 뷰

문제

Cluster: kubectl config use-context k8s
  • Application Service 운영
    • ingress-nginx namespace에 nginx이미지를 app=nginx 레이블을 가지고 실행하는 nginx pod를 구성하세요.
    • 앞서 생성한 nginx Pod를 서비스하는 nginx service를 생성하시오
    • 현재 appjs-service Service는 이미 동작 중입니다. 별도 구성이 필요 없습니다.
  • Ingress 구성
    • app-ingress.yaml 파일을 생성하여 다음 조건의 ingress 서비스를 구성하시오.
    •  ingess name: app-ingress
    • NODE_PORT:<ingress controller node port>/접속했을 때 nginx 서비스로 연결
    • NODE PORT:<ingress controller node port>/app 접속했을 때 appjs-service 서비스로 연결
    • Ingress 구성에 다음의 annotations을 포함시키시오.
      annotations: kubernetes.io/ingress.class: nginx

appjs pod 구성

apiVersion: v1
kind: ConfigMap
metadata:
  name: appjs-node-server
  namespace: ingress-nginx
data:
  server.js: |
    const http = require('http');
    const hostname = '0.0.0.0';
    const port = 80;

    const server = http.createServer((req, res) => {
      if (req.url === '/app' || req.url === '/app/') {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/html');
        res.end(`<html><body><h1>Hello from Node.js container: ${process.env.HOSTNAME}</h1></body></html>`);
      } else {
        res.statusCode = 404;
        res.end('Not Found');
      }
    });

    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: appjs
  namespace: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: appjs
  template:
    metadata:
      labels:
        app: appjs
    spec:
      containers:
      - name: nodejs
        image: node:18-alpine
        ports:
        - containerPort: 80
        env:
        - name: HOSTNAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        volumeMounts:
        - name: nodejs-server
          mountPath: /usr/src/app
        workingDir: /usr/src/app
        command: ["node", "server.js"]
      volumes:
      - name: nodejs-server
        configMap:
          name: appjs-node-server
          defaultMode: 0755
---
apiVersion: v1
kind: Service
metadata:
  name: appjs-service
  namespace: ingress-nginx
spec:
  selector:
    app: appjs
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

문제 풀이

# 1. context 설정
kubectl config use-context k8s

# 2. nginx pod 구성
kubectl run nginx --image=nginx --namespace=ingress-nginx --dry-run=client -o yaml > nginx-pod.yaml
vim nginx-pod.yaml

....

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: ingress-nginx
spec:
  containers:
  - image: nginx
    name: nginx

kubectl apply -f nginx-pod.yaml



# 3. nginx service 생성
kubectl expose pods nginx --name=nginx-service --selector=app=nginx -n ingress-nginx  --port=80
curl <nginx-service clusterip>

# 4. app-ingress.yaml  구성
vim app-ingress.yaml 

....

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  annotations: 
    kubernetes.io/ingress.class: nginx
  namespace: ingress-nginx
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: appjs-service
            port:
              number: 80



# 5. ingress 확인
curl NODE:<NodePort>/
curl NODE:/<NodePort>/app
 

Ingress

Make your HTTP (or HTTPS) network service available using a protocol-aware configuration mechanism, that understands web concepts like URIs, hostnames, paths, and more. The Ingress concept lets you map traffic to different backends based on rules you defin

kubernetes.io

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/09   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함