다음은 쿠버네티스 스터디 자료를 참고해 정리한 내용입니다.
<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;'
2
생성
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
감사합니다.