ingrss 란 여러가지 조건에 따라 트래픽 라우팅을 설정해 주는 서비스이다.

AWS 로 예를들면 ALB 와 동일하다고 생각하면 된다. 

설정할 수 있는 조건으로는 host 와 path 등이 있고, ingress 를 사용하기 위해서는 ingress-controller 가 설치 되어 있어야 한다.


예제

  • Nginx Deployment 와 Service 가 Cluster 내부에서 기동 중
  • ingress controller 를 사용하여 외부에서 내부의 Nginx 서비스로 접근
  • Nginx ingress controller 는 아래의 경로를 통해 설치 

nginx ingress controller

https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters

 

Installation Guide - Ingress-Nginx Controller

Installation Guide There are multiple ways to install the Ingress-Nginx Controller: with Helm, using the project repository chart; with kubectl apply, using YAML manifests; with specific addons (e.g. for minikube or MicroK8s). On most Kubernetes clusters,

kubernetes.github.io

 


  • Deploy, Service, Ingress 배포
  • 배포 후 Nginx-ingress-controller 의 서비스 인 ingress-nginx-controller 의 ip:port 형식으로 호출하여야 한다
  • ingress 에서 path 를 /test 로 설정하였으므로, 호출시 ip:port/test 를 하면 클러스터 내부의 nignx 응답을 받을 수 있다
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 31100
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
---
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 31100
  • 제 횐경에서의 ingress-nginx-controller 는 30303 포트이므로 NodeIP:30303/test 를 하게되면 ingress 를 통해서 nignx 가 호출 된다

'k8s > CKAD' 카테고리의 다른 글

NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

 

k8s 내부에서 pod 간의 통신을 제어할때 NetworkPolicy 를 사용하여 제어 할 수 있다.

간단한 예로 NetworkPolicy 적용 예를 살펴 보자


조건

1. 파드명이 db인 파드와 web인 파드가 있다

2. 파드명이 db인 파드는 파드명이 web  에서 오는 통신만 허용 하여야 한다

 


상세설명

[db pod yaml]

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: db
  name: db
  namespace: np-test
spec:
  containers:
  - image: nginx
    name: db

 

[web pod yaml]

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
  namespace: np-test
spec:
  containers:
  - image: nginx
    name: web

 

[NetworkPolicy]

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: np-test
spec:
  podSelector:
    matchLabels:
      app: db
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: web
  • NetworkPolicy 의 spec.podSelector 는 대사이 되는 파드를 지정하는 곳이다
  • matchLabels 가 app: db 로 설정 되어 있는내용은, 레이블 값이 app: db 인 파드는 아래 policy 의 정책을 적용 받는다 라는 내용이다
  • policyTypes 는 Ingress, Egress 조건을 지정한다
  • spec.ingress.from.podSelector 부분은 ingress 를 허용할 조건을 가진 파드를 명시한다
  • matchLabels 가 app: web 으로 되어 있는 부분은, 레이블 값이 app: web 인 파드만 위에 명시된 app: db 가 포함된 파드에 트래픽을 허용한다

위에 명시된 yaml 파일을 전부 배포후 테스트

 

1. web pod 에서 db pod 로 통신 확인

2. NetworkPolicy 에서 ingress 부분 삭제 후 통신 여부 테스트

- 아래 처럼 spec.ingress.from.podSelector를  app:was 로 설정하면 app: was 레이블을 가진 파드만 db 파드로 통신이 허용됨

- 아래 yaml로 NetworkPolicy 배포(수정) 후 통신 확인

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: np-test
spec:
  podSelector:
    matchLabels:
      app: db
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: was

 

NetworkPolicy 수정

 

아래와 같이 동일한 명령어지만 통신이 불가 한 것을 확인 할 수 있다

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

주제 : 조건에 맞는 파드를 생성하라

조건 : 

  • pod name : nginx
  • env : var = value
  • 생성 후 env 확인
kubectl run nginx --image=nginx --restart=Never --env=var1=value1 --dry-run=client -o yaml

[위 명령어로 생성되는 yaml 파일을 아래와 같이 수정]
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - env:
    - name: var1
      value: value1
    image: nginx
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never


[생성 후 pod 의 env 확인 방법]
kubectl exec -it nginx -- env
kubectl exec -it nginx -- sh -c 'echo $varl'
kubectl describe nginx | grep value1

https://kubernetes.io/ko/docs/tasks/inject-data-application/define-environment-variable-container/

'k8s > CKA' 카테고리의 다른 글

[연습]9. etcd backup AND restore  (0) 2023.03.04
[연습]7. pod_mount  (0) 2023.03.04
[연습]5. Pod run  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02
[연습]3. NetworkPolicy  (0) 2023.03.02

주제 : 명령어를 사용하여 POD 실행

조건 : 

  • 이름 : nginx
  • nodeselector : disk = ssd
  • image = nginx
kubectl run nginx-name --image=nginx --dry-run=cliend -o yaml

[위명령어를치면 yaml 파일이 나오는데 아래와 같이 수정 하면 됨]
apiVersion: v1
kind: Pod
metadata:
  name: nginx-name
spec:
  containers:
  - image: nginx
    name: nginx
  nodeSelector:
    disk: ssd

 

'k8s > CKA' 카테고리의 다른 글

[연습]7. pod_mount  (0) 2023.03.04
[연습]6. Pod run with env  (0) 2023.03.02
[연습]4. expose AND service  (0) 2023.03.02
[연습]3. NetworkPolicy  (0) 2023.03.02
[연습]2. cordon AND drain  (0) 2023.03.02

주제 : grafana deploy 에서 사용하고 있는 3000번 포트에 대한 NodePort로의 서비스를 생성하라

조건

  • 타입 : NodePort
  • 포트 : TCP 3000
  • 이름 : grafana
kubectl expose deployment grafana --name=grafana --port=3000 --type=NodePort --protocol=TCP

[참고] 위 내용을 실행하면 아래와같은 서비스가 배포가됨
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app.kubernetes.io/instance: grafana
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: grafana
    app.kubernetes.io/version: 9.3.6
    helm.sh/chart: grafana-6.50.7
  name: grafana
spec:
  ports:
  - port: 3000
    protocol: TCP
    targetPort: 3000
  selector:
    app.kubernetes.io/instance: grafana
    app.kubernetes.io/name: grafana
  type: NodePort

 

https://kubernetes.io/docs/tutorials/services/connect-applications-service/

'k8s > CKA' 카테고리의 다른 글

[연습]6. Pod run with env  (0) 2023.03.02
[연습]5. Pod run  (0) 2023.03.02
[연습]3. NetworkPolicy  (0) 2023.03.02
[연습]2. cordon AND drain  (0) 2023.03.02
[연습]1. Create ClusterRole AND ClusterRoleBinding  (0) 2023.03.02

+ Recent posts