brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jul 11. 2021

쿠버1탄-21. 쿠버네티스 - Host기반 라우팅


다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다.


<1> Host기반 라우팅

<2> 인그레스 생성 및 확인

<3> 인그레스를 통한 접속 확인

<4> 삭제

<5> 다음 과정



<1> Host기반 라우팅


IP기반이 아닌 , 호스트 도메인 기반으로 접속 하는것이다.





1

기존 오브젝트 삭제

kubectl delete deployments,svc,ingress --all


2

모니터링

watch -d kubectl get ns,no,po,svc,deploy,rs,ing,ep

 watch -d kubectl get ns,no,po,svc,deploy,rs,ing,ep -owide


3

host 도메인이 입력되어 있다!!!

3개 적용이 다르니 참고 바란다. 아래 3개

공통 적용 rewrite-taget 

dkos.com

*dkos.com /echo 경로 


cat << EOF > ingress2.yaml

apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

  name: ingress-2

  annotations:

    nginx.ingress.kubernetes.io/rewrite-target: /dkos

    kubernetes.io/ingress.class: "nginx"

spec:

  rules:

  - host: dkos.com

    http:

      paths:

      - path: /

        backend:

          serviceName: svc3-admin

          servicePort: 8080

  - host: "*.dkos.com"

    http:

      paths:

      - path: /echo

        backend:

          serviceName: svc3-admin

          servicePort: 8080

EOF

   



<2>  인그레스 생성 및 확인


1

터미널1

watch -d 'kubectl get pod -n ingress-nginx -o wide -l app.kubernetes.io/component=controller; echo; kubectl get svc -n ingress-nginx; echo; kubectl ingress-nginx ingresses; echo ;kubectl get ingress,ep;'


생성

curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/6/ingress2.yaml

sed -i 's/dkos.com/<각자 자신의 닉네임의 도메인>/g' ingress2.yaml

sed -i 's/dkos.com/masterseo.com/g' ingress2.yaml


kubectl apply -f ingress2.yaml


kubectl apply -f svc1-pod.yaml

kubectl apply -f svc2-pod.yaml

kubectl apply -f svc3-pod.yaml



3

확인 

k get ingress

NAME        CLASS    HOSTS                           ADDRESS          PORTS   AGE

ingress-2   <none>   masterseo.com,*.masterseo.com   18.183.248.245   80      68s


유틸로 볼수도 있다.

 k ingress-nginx ingress

INGRESS NAME   HOST+PATH      ADDRESSES        TLS   SERVICE      SERVICE PORT   ENDPOINTS

ingress-2      masterseo.com/         13.114.225.167   NO    svc3-admin   8080           3

ingress-2      *.masterseo.com/echo   13.114.225.167   NO    svc3-admin   8080           3


4

상세 확인

kubectl describe ingress ingress-2

Name:             ingress-2

Namespace:        default

Address:          13.114.225.167

Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)

Rules:

  Host             Path  Backends

  ----             ----  --------

  masterseo.com

                   /   svc3-admin:8080 ()

  *.masterseo.com

                   /echo   svc3-admin:8080 ()

Annotations:       kubernetes.io/ingress.class: nginx

                   nginx.ingress.kubernetes.io/rewrite-target: /dkos

Events:

  Type    Reason  Age                From                      Message

  ----    ------  ----               ----                      -------

  Normal  Sync    41m (x2 over 42m)  nginx-ingress-controller  Scheduled for sync





<3> 인그레스를 통한 접속 확인


1

터미널2에서 log 모니터링 ?

kubectl ingress-nginx logs -n ingress-nginx -f


2

svc3-admin 접속 , 결과 확인


port 재확인

export IngHttp=$(kubectl get service -n ingress-nginx ingress-nginx-controller -o jsonpath='{.spec.ports[0].nodePort}')

echo $IngHttp


 k get node

NAME                                               STATUS   ROLES                  AGE   VERSION

ip-172-20-56-239.ap-northeast-1.compute.internal   Ready    node                   14h   v1.20.8

ip-172-20-60-135.ap-northeast-1.compute.internal   Ready    control-plane,master   14h   v1.20.8

ip-172-20-62-175.ap-northeast-1.compute.internal   Ready    node                   14h   v1.20.8


ubuntu@ip-172-20-60-135:~$ dig ip-172-20-60-135.ap-northeast-1.compute.internal  +short

172.20.60.135


echo $MASTER

echo $IngHttp

curl $MASTER:$IngHttp

<html>

<head><title>404 Not Found</title></head>

<body>

<center><h1>404 Not Found</h1></center>

<hr><center>nginx</center>

// 연결 불가함


curl $MASTER:$IngHttp/echo

<html>

<head><title>404 Not Found</title></head>

<body>

<center><h1>404 Not Found</h1></center>

<hr><center>nginx</center>

// 연결 불가함


4

curl $MASTER:$IngHttp/echo -v

*   Trying 172.20.60.173:32588...

* TCP_NODELAY set

* Connected to 172.20.60.173 (172.20.60.173) port 32588 (#0)

> GET /echo HTTP/1.1

> Host: 172.20.60.173:32588

> User-Agent: curl/7.68.0


// Host 부분을 확인함. ip라서 안되는것임.

// 호스트에 도메인이 있어야 한다.


3

지금 도메인이 없으므로 host파일을 넣고 테스트한다.

아니면 dns에 ip 입력 


마스터 노드 혹은 자신의 pc에서 테스트 

MASTER=172.20.60.173

MYDOMAIN1=masterseo.com

MYDOMAIN2=test.masterseo.com


4

/etc# more hosts

127.0.0.1 localhost

172.20.60.173   masterseo.com

172.20.60.173   test.masterseo.com



5

# svc3-admin 접속 > 결과 확인

echo $MYDOMAIN1

echo $IngHttp


잘됨

curl $MYDOMAIN1:$IngHttp

curl $MYDOMAIN1:$IngHttp/admin

curl $MYDOMAIN1:$IngHttp/echo

curl $MYDOMAIN1:$IngHttp/echo/1


curl $MYDOMAIN2:$IngHttp

x

curl $MYDOMAIN2:$IngHttp/admin

x


curl $MYDOMAIN2:$IngHttp/echo

o

curl $MYDOMAIN2:$IngHttp/echo/1

o

curl $MYDOMAIN2:$IngHttp/echo/1/2

o



curl $MYDOMAIN1:$IngHttp

Hostname: deploy3-adminsrv-7bd5d589b9-7kn2q

Pod Information:

        -no pod information available-

Server values:

        server_version=nginx: 1.13.0 - lua: 10008

Request Information:

        client_address=100.124.116.130

        method=GET

        real path=/dkos

        query=

        request_version=1.1

        request_uri=http://masterseo.com:8080/dkos

Request Headers:

        accept=*/*

        host=masterseo.com:32588

        user-agent=curl/7.68.0

        x-forwarded-for=172.20.60.173

        x-forwarded-host=masterseo.com:32588

        x-forwarded-port=80

        x-forwarded-proto=http

        x-real-ip=172.20.60.173

        x-request-id=19db4c95427b01198f11dee8bf8104d5

        x-scheme=http



curl $MYDOMAIN1:$IngHttp -v

*   Trying 172.20.60.173:32588...

* TCP_NODELAY set

* Connected to masterseo.com (172.20.60.173) port 32588 (#0)

> GET / HTTP/1.1

> Host: masterseo.com:32588

> User-Agent: curl/7.68.0

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK

< Date: Thu, 07 Oct 2021 07:42:25 GMT

< Content-Type: text/plain



6

웹브라우저에서  접속하기 ?


도메인 : 포트 로 접속

도메인 : 포트   = nginx 홈페이지 , pod 1개

도메인 : 포트/guest  = Hello Kubernetes bootcamp! | deploy2-guestsrv-6f7f766988-kn4bt | v=1 ,   pod 2개

도메인 : 포트/admin  =  xforward-for 정보 , pod 3개


도메인 : 포트   

= nginx 홈페이지 , pod 1개

도메인 : 포트/guest  

= Hello Kubernetes bootcamp! | deploy2-guestsrv-6f7f766988-kn4bt | v=1 ,   pod 2개

도메인 : 포트/admin  

=  xforward-for 정보 , pod 3개


<4> 삭제


kubectl delete deployments,svc,ingress --all




<5> 다음 과정


https://brunch.co.kr/@topasvga/1710


https://brunch.co.kr/@topasvga/1656


감사합니다.


        

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari