Notice
Recent Posts
Recent Comments
Link
«   2024/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
Tags
more
Archives
Today
Total
관리 메뉴

클라우드 엔지니어 꿈나무

Kubernetes(K8S) Ingress - Centos7 본문

kubernetes

Kubernetes(K8S) Ingress - Centos7

새싹싹이 2023. 9. 18. 14:40

Ingress

Cluster 외부에서 내부 서비스로 접근하는 HTTP, HTTPS 를 관리하는 API 오브젝트

LoadBalancer, SSL 인증, 도메인(Named) 기반의 가상 호스팅 제공

기존에는 하나의 웹서버에서 처리하지만 ingress를 통해서 분리하여 성능을 향상시킴

단일 Pod 노출의 경우에는 kubectl expose와 유사한 효과를 내지만 복잡한 경우에는 더 많은 기능 제공

Ingress controller 종류

GCE용(Google Container Engine) = ingress-gce

NGINX용 : ingress-nginx

 

master

vi ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: svc1
            port:
              number: 80
      - path: /bar
        pathType: Prefix
        backend:
          service:
            name: svc2
            port:
              number: 80

kubectl apply -f ingress.yml -n ingress-nginx : ingress-nginx 네임스페이스로 적용

kubectl create deployment nginx1 --namespace ingress-nginx --replicas 1 --image nginx : deployment 생성

kubectl create deployment nginx2 --namespace ingress-nginx --replicas 1 --image nginx

kubectl expose deployment nginx1 --name svc1 --namespace ingress-nginx --port 80 : 클러스터IP로 서비스 실행

kubectl expose deployment nginx2 --name svc2 --namespace ingress-nginx --port 80

 

인터넷창 


deploy 및 service 까지 yml로 돌릴 시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: svc1
            port:
              number: 80
      - path: /babo
        pathType: Prefix
        backend:
          service:
            name: svc2
            port:
              number: 80
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  namespace: ingress-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: n1
        image: nginx
        ports:
        - containerPort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx2
  namespace: ingress-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx2
  template:
    metadata:
      labels:
        app: nginx2
    spec:
      containers:
      - name: n2
        image: nginx
        ports:
        - containerPort: 80
apiVersion: v1
kind: Service
metadata:
  name: svc1
  namespace: ingress-nginx
spec:
  selector:
    app: nginx1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP


---
apiVersion: v1
kind: Service
metadata:
  name: svc2
  namespace: ingress-nginx
spec: 
  selector:
    app: nginx2 
  ports: 
    - protocol: TCP 
      port: 80  
      targetPort: 80 
  type: ClusterIP

<참고>

kubectl get deploy -n ingress-nginx - namespace로 확인

kubectl get all -n ingress-nginx : delpy, pods 등 한 번에 확인 가능

kubectl describe pod ingress-nginx-admission-create-ddbfn -n ingress-nginx 자세히 보기