일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- CSV
- zookeeper
- ip
- java
- jvm
- airflow
- docker
- MAC address
- log
- Python
- kubernetes
- Spring
- kubeadm
- helm
- PostgreSQL
- aws s3
- Vision
- AWS
- OS
- Network
- EC2
- grafana
- Kafka
- Operating System
- Trino
- CVAT
- tcp
- JavaScript
- Packet
- kubectl
- Today
- Total
JUST WRITE
포트 번호 쓰기도 귀찮네(1) 본문
포트 번호 쓰기도 귀찮네(1)
예전 포스팅에서 Ingress를 통해서 Kubernetes의 Service를 원하는 URL로 설정을 해보았습니다.
Nginx Ingress Controller를 통해서 URL를 설정하였습니다.
다만 Nginx Ingress Controller로 세팅한 Service의 Port 번호를 알아야 했습니다.
Port 번호도 입력하기 귀찮습니다.
Google, Naver처럼 Domain으로만 Kubernetes Service로 접근하는 게 가장 편합니다.
오늘 포스팅에서 Port번호 기억할 필요 없이 Domain으로 Service에 접근하는 방법을 정리하였습니다.
Nginx Ingress Controller
저번 포스팅에서 Kubernetes Cluster에 Nginx Ingress Controller를 통해 Router 역할을 하였습니다.
32058 Port를 통해서 Ingress Controller에 접근이 가능합니다.
$ kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-admission-create-rbdjj 0/1 Completed 0 6d7h
pod/ingress-nginx-admission-patch-k74l8 0/1 Completed 1 6d7h
pod/ingress-nginx-controller-bd5bb9d6f-88jrx 1/1 Running 6 (3h5m ago) 6d7h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.106.85.113 <none> 80:32058/TCP,443:32272/TCP 6d7h
service/ingress-nginx-controller-admission ClusterIP 10.101.135.200 <none> 443/TCP 6d7h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1 6d7h
NAME DESIRED CURRENT READY AGE
replicaset.apps/ingress-nginx-controller-bd5bb9d6f 1 1 1 6d7h
NAME COMPLETIONS DURATION AGE
job.batch/ingress-nginx-admission-create 1/1 7s 6d7h
job.batch/ingress-nginx-admission-patch 1/1 7s 6d7h
해당 Controller로 Routing을 원하는 Service를 Ingress로 설정합니다.
$ kubectl get ingress -n argocd -o yaml
apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
meta.helm.sh/release-name: argocd
meta.helm.sh/release-namespace: argocd
nginx.ingress.kubernetes.io/backend-protocol: HTTP
creationTimestamp: "2023-05-24T05:56:18Z"
generation: 1
labels:
app.kubernetes.io/component: server
app.kubernetes.io/instance: argocd
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: argocd-server
app.kubernetes.io/part-of: argocd
helm.sh/chart: argo-cd-5.34.4
name: argocd-server
namespace: argocd
resourceVersion: "1961411"
uid: 72f7febd-f5dc-449b-a609-f4a1fd349675
spec:
ingressClassName: nginx
rules:
- http:
paths:
- backend:
service:
name: argocd-server
port:
number: 80
path: /argocd
pathType: Prefix
status:
loadBalancer:
ingress:
- ip: 172.31.33.58
kind: List
metadata:
resourceVersion: ""
아래 주소로 들어가면 ArgoCD WEB UI에 접근하는 것을 확인할 수 있습니다.
http://{control-plane IP}:32058/argocd
argocd라는 path가 설정되지만 32058이라는 Port번호를 기억해야 합니다.
Domain 세팅
Domain으로 접근하기 위해서는 dns 세팅
가비아를 통해서 domain 세팅을 진행하였습니다.
(보안 문제로 풀 Domain명은 해당 포스팅에서 *로 처리하였습니다)
저번 포스팅에서 진행한 ArgoCD Web UI를 아래 도메인으로 세팅해 보겠습니다.
Control-plane의 IP를 ArgoCD Domain(argocd.****.***)으로 세팅하였습니다.
Control-plane의 IP와 Nginx Ingress Controller Service Port가 아닌 Domain으로 접근가능합니다.
http://argocd.****.***
Ingress 설정 수정
저번 포스팅에서 ArgoCD Ingress 설정은 rootpath가 '/argocd'로 설정되어 있습니다.
저번에 설정한 ArgoCD Helm Chart Ingress 부분입니다.
ingress:
enabled: true
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTP
ingressClassName: nginx
paths:
- "/argocd"
이번에는 하위 경로 없이 바로 ArgoCD Web에 접근하도록 설정합니다.
어떤 host명으로 접근했을 시 해당 Service로 Routing 되는지 설정합니다.
ingress:
enabled: true
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTP
ingressClassName: nginx
hosts:
- argocd.****.***
그럼 이제 아래 URL로 ArgoCD Web으로 접근이 가능합니다.
아직 Port번호가 남았습니다.
http://argocd.****.***:32058
Nginx 설정
http의 기본 Port는 80입니다.
기본 Port이기 때문에 생략이 가능해 host명만 명시해 주면 됩니다.
그래서 위 32058 Port를 포트포워딩해주면 됩니다.
Nginx을 통해서 포트포워딩을 하였습니다.
Nginx 설치
Kubernetes Cluster의 Control-Plane에 Nginx을 설치하였습니다.
Ubuntu에서 Nginx는 apt 명령어로 설치가 가능합니다.
$ sudo apt-get install nginx -y
$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
Nginx 설정
다음은 Nginx 포트포워딩 설정을 합니다.
nginx path내 sites-available/default 파일을 수정하였습니다.
$ vi /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name _;
location / {
resolver 168.126.63.1;
proxy_pass http://$host:32058;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Connection "";
proxy_http_version 1.1;
}
}
- resolver -> 168.126.63.1은 KT DNS Server IP
- proxy_pass -> 80 port로 들어온 접근을 32058 Port로 포워딩
Control-Plane Server 80 Port로 접근하면 32058 Port로 포워딩하도록 설정하였습니다.
설정이 끝나면 nginx service를 시작합니다.
$ sudo systemctl enable --now nginx
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-07-11 10:02:49 UTC; 3h 7min ago
Docs: man:nginx(8)
Process: 36146 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 36148 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 57514 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
Main PID: 36149 (nginx)
Tasks: 3 (limit: 9384)
Memory: 4.8M
CPU: 339ms
CGroup: /system.slice/nginx.service
├─36149 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─57515 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
└─57516 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Jul 11 10:02:49 k8smaster systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 11 10:02:49 k8smaster systemd[1]: Started A high performance web server and a reverse proxy server.
Jul 11 10:12:08 k8smaster systemd[1]: Reloading A high performance web server and a reverse proxy server...
Jul 11 10:12:08 k8smaster systemd[1]: Reloaded A high performance web server and a reverse proxy server.
Jul 11 10:12:41 k8smaster systemd[1]: Reloading A high performance web server and a reverse proxy server...
Jul 11 10:12:41 k8smaster systemd[1]: Reloaded A high performance web server and a reverse proxy server.
Jul 11 10:13:50 k8smaster systemd[1]: Reloading A high performance web server and a reverse proxy server...
그럼 이제 아래 URL로 ArgoCD Web 접근이 가능합니다.
http://argocd.****.***
정리
Nginx Ingress Controller와 Nginx을 통해서 Kubernetes Service를 Domain으로 접근하도록 하였습니다.
해당 방법 말고도 LoadBalancer를 통해서도 가능합니다.
다음 포스팅에서는 MetalLB를 통해 Domain으로 접근하도록 해보겠습니다.
'MLOps > Kubernetes' 카테고리의 다른 글
Pod 주기적으로 삭제하기 - Kubernetes에 CronJob 세팅 (0) | 2023.08.06 |
---|---|
Helm도 git처럼 diff가 가능하다고?! - Helm Plugin 설치 (0) | 2023.07.19 |
PV 얼마나 남았나?!?! (3) | 2023.07.10 |
[Error Reporting] Worker Node join 에러 - CNI 이슈 (0) | 2023.06.26 |
손쉽게 동적으로 Persistent Volume 생성하기 (0) | 2023.06.15 |