본문 바로가기

⭐ Kubernetes & EKS/LoadBalancer & Ingress

인그레스(Ingress) 소개 및 실습

# 인그레스 소개

- 규칙에 따라 접속경로를 제공하는 기능

# 인그레스 실습

kubectl create -f http-go-deploy.yaml

kubectl edit svc http-go-svc

type 을 ClusterIP > NodePort 로 변경한다.

- NodePort 로 변경하지 않으면 에러가 발생한다.

# 인그레스 작성요령 찾아보기

쿠버네티스 공식사이트 > Ingress 검색 > Ingress - Kubernetes > 인그레스 리소스 복사

# ingress.yaml 파일 생성

vim htto-go-ingress.yaml

# serviceName 은 kubectl get svc 실행 하여 나온 서비스 이름과 같아야 한다.

kubectl get svc
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: http-go-ingress
spec:
  rules:
  - host: gasbugs.com
    http:
      paths:
      - path: /
        backend:
          serviceName: http-go-svc
          servicePort: 80

# 작성된 인그레서 서비스 실행하기

kubectl create -f htto-go-ingress.yaml

# 생성된 인그레스 서비스 확인

kubectl get ingress

- ADDRESS 를 받을때 까지 기다린다 약 10분이상 소요된다.

- ip를 정상적으로 받아온것을 확인 할 수있다.

# 도메인을 임시로 등록하기

sudo vim /etc/hosts

- 위의 이미지처럼 내용을 추가해 준다.

# 도메인으로 접속 확인하기

curl gasbugs.com

- 정상 응답 확인

# 인그레스(ingress) 연습문제(tls)

# ingress 서비스를 실행할 yaml 파일 작성

vim ingress-tomcat-http-go.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-http-go-ingress
spec:
  tls:
  - hosts:
    - tomcat.gasbugs.com
    - http-go.gasbugs.com
    secretName: tls-secret
  rules:
  - host: tomcat.gasbugs.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat
          servicePort: 80
  - host: http-go.gasbugs.com
    http:
      paths:
      - path: /
        backend:
          serviceName: http-go
          servicePort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-tomcat
  labels:
    app: tomcat
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: consol/tomcat-7.0
        ports:
        - containerPort: 8080

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-go
  labels:
    app: http-go
spec:
  replicas: 3
  selector:
    matchLabels:
      app: http-go
  template:
    metadata:
      labels:
        app: http-go
    spec:
      containers:
      - name: http-go
        image: gasbugs/http-go
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: http-go
spec:
  selector:
    app: http-go
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30001
  type: NodePort
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  selector:
    app: tomcat
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30002
  type: NodePort

# 작성된 yaml 파일 실행하기

kubectl create -f ingress-tomcat-http-go.yaml

# 방화벽 정책 추가

gcloud compute firewall-rules create rule1 --allow tcp:30001-30002

# tls 인증서 추가

kubectl delete secret tls-secret
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=tomcat.gasbugs.com
kubectl create secret tls tls-secret --cert=tls.cert --key=tls.key
curl -k  https://tomcat.gasbugs.com

# 인그레스가 정상적을 생성되었는지 확인

쿠버네티스 엔진 > 서비스 및 수신 > 인그레스 > 서비스 확인

kubectl get ingress

# etc/hosts 수정하기

인그레스의 ip와 도메인 name 추가하기

# 서비스 확인하기

curl -k https://tomcat.gasbugs.com

- 위의 내용과 같이 나온다면 정상적으로 호출된 것이다.

# 웹브라우저에서 확인하기

버추얼 박스에서 위에 작업과 같이 ect/hosts 에 위의 예시 정보를 입력 > 도메인 이름으로 웹브라우저에 접근하면 접속 가능

# 버추얼박스 etc/hosts rule 추가

# 웹브라우저에서 접근하기