본문 바로가기
카테고리 없음

[kubernetes] Helm으로 nginx ingress controller 설치하기

by 6^6 2023. 6. 15.
728x90

docker pull nginx:latest

 

 

 

 

 

 

 

https://hyeo-noo.tistory.com/385

 

#우분투 리눅스

sudo snap install helm --classic

 

 

일반적으로 사용하는 helm의 stable repo가 업데이트를 중단했고,

k8s는 빠르게 업데이트 되는 중이다.

 

stable/nginx-ingress는 사용하기엔 너무 옛날 버전이라서, 

k8s에서 따로 배포하는 ingress-nginx repo를 사용해 ingress-controller를 설정해 보았다.

 

 

cd ~

mkdir k8s/nginx

cd nginx

nginx pod service 생성

# nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx:1.16
    name: nginx
    resources: {}
  restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: nginxsvc
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx

Service의 Type은 ClusterIP로 설정한다.

 

 

kubectl apply -f mynginx.yaml

 

 

 

helm repo 추가

 

GitHub - kubernetes/ingress-nginx: NGINX Ingress Controller for Kubernetes

NGINX Ingress Controller for Kubernetes. Contribute to kubernetes/ingress-nginx development by creating an account on GitHub.

github.com

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

 

 

 

Ingress namespace 생성

kubectl create ns ingress-nginx

 

 

 

helm repo update

helm search repo ingress-nginx

 

 

 

helm install ingress-nginx

helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx

 

 

kubectl get pod -n ingress-nginx

kubectl get svc -n ingress-nginx

ingress가 구동되었다.

 

 

 

ingress-controller 생성

# mynginx-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations: 
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: mynginx-ingress
spec:
  rules:
  # - host: -> domain이 없는 경우 생략 가능
  - http:
      paths:
      - path: /nginx
        pathType: Prefix
        backend:
          service:
            name: nginxsvc
            port:
              number: 80

위에거 대신

 

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

Bare metal clusters

 

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.0/deploy/static/provider/baremetal/deploy.yaml

kubectl apply -f mynginx-ingress.yaml

kubectl get ing

 

 

추가사항
Error from server (InternalError): error when creating "aomd-ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": context deadline exceeded

ingress controller 가 제대로 생성되지 않고, 위와 같은 에러가 발생한다면

 

동작에 직접적인 영향을 미치지 않는 webhook을 제거하면 된다.

kubectl delete validatingwebhookconfiguration ingress-nginx-admission

 

 

연결 확인

https://www.youtube.com/watch?v=9TMIetXb6Pw&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=29 

 

service - nodeport

외부에서 로드발랜싱으로 포트포워딩을 하려면 포트가 정해져있어야하기때문에

이부분 수정함

nodeport기반의 서비스에서

외부 워커노드에 30100으로 들어오면(고정된 포트) 80포트로 웹서비스로 연결되도록

외부 워커노드에 30200으로 들어오면(고정된 포트) 443포트로 웹서비스로 연결되도록

 

 

 

controller가 running중이고 ?...??

 

 

 

 

걍 원래 저 홈페이지대로....

 

cd ~

mkdir webserver

cd webserver

vi index.html

 

 

namespace바꾸

kubectl config set-context --current --namespace=ingress-nginx

728x90

댓글