안녕하세요. 오늘은 Ingress 에 대해서 얘기해 보려 합니다.
저도 쿠버네티스를 공부하며, 기록 할겸 이렇게 계속 쿠버네티스 강의를 쓰고 있습니다. 하면서 보니 적용할 수 있는 곳과 적용하기 힘든 곳이 구분이 되더라구요 같이 글 보시는 여러분들도 많은 것들을 느끼면서 공부하는데 제 글이 도움이 되셨으면 합니다.
쿠버네티스에서 ingress로 사용할 수 있는 것들이 많은 것으로 알고 있습니다. 그중 쿠버네티스에서는 AWS와 GCE 그리고 Nginx를 지원합니다. 그 중에서 우리는 단돈서버에서 설치했으니 Nginx ingress 컨트롤러를 사용해 보도록 하겠습니다.
ingress 부분을 공부하면서 많은 실수가 있어서 삽질즘 했는데 그 부분 역시 내용을 공유 하도록 하겠습니다.
우선 nginx ingress 를 설치합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/baremetal/deploy.yaml
https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters
Installation Guide - NGINX Ingress Controller
Installation Guide There are multiple ways to install the NGINX ingress controller: with Helm, using the project repository chart; with kubectl apply, using YAML manifests; with specific addons (e.g. for minikube or MicroK8s). On most Kubernetes clusters,
kubernetes.github.io
자세한 사항은 위 Nginx Ingress Controller 에 가셔서 확인 하실 수 있습니다.
이제 설치가 되셨다면 다음과 같이 확인해 보실 수 있습니다.
kubectl get namespaces
NAME STATUS AGE
default Active 17h
ingress-nginx Active 14h
kube-node-lease Active 17h
kube-public Active 17h
kube-system Active 17h
ingress-nginx 가 생성 되신 것을 볼 수 있습니다. 그리고 아래와 같이 확인하시면 ingress controller가 생성 되신 것을 알 수 있습니다.
kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-hpjqv 0/1 Completed 0 14h
ingress-nginx-admission-patch-4l8fz 0/1 Completed 0 14h
ingress-nginx-controller-64f79ddbcc-8vtxv 1/1 Running 0 14h
그리고 우리는 이제 기본 namespace를 ingress-nginx로 변경해 줍니다.
kubectl config set-context --current --namespace='ingress-nginx'
이제 테스트를 위해서 Deployment replicas 3 으로 생성해 줍니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
그럼 위와 같이 pod를 확인 할 수 있습니다. 저렇게 나온 분들은 정상인거에요^^
자 이제 이전 시간에 했던 단일 진입점을 만들어 줄겁니다.
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: ClusterIP
clusterIP: 10.100.200.200
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
우리가 배웠던 모든 것들을 했습니다.
이제 외부에서 진입하기 위해서 ingress를 적용해 볼겁니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
defaultBackend:
service:
name: nginx
port:
number: 80
ingressClassName: nginx
kubectl create -f ingress.yaml
다들 잘 만들어 주셨으면. 다음과 같이 다시한번 확인 해 주세요
root@master:~/install/yaml/ingress# kubectl get service -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
ingress-nginx-controller NodePort 10.107.111.166 <none> 80:31554/TCP,443:30298/TCP 18h app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
ingress-nginx-controller-admission ClusterIP 10.107.217.23 <none> 443/TCP 18h app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
nginx ClusterIP 10.100.200.200 <none> 80/TCP 17h app=nginx
80:31554 / 443:30298 이런식으로 포트 포워딩 되어 있는데. 외부에서 31554로 들어가면 이제 우리는 외부 웹 페이지에서 확인 되실겁니다.
저는 3개 nginx pod의 index.html 을 저런 식으로 변경 했습니다. R/R 로드벨런싱되어 실행 됩니다.
다들 잘 되나요?
그리고 저는 처음에 ingress yaml 부분에 ingressClassName 을 넣지 않아 아래와 같이 ADDRESS 가 생성 되지 않았습니다.
여러분은 이러 고충을 격지 않으셨으면 좋겠습니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
defaultBackend:
service:
name: nginx
port:
number: 80
root@master:~/install/yaml/ingress# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress <none> * 80 9s
https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
Ingress Controllers
In order for an [Ingress](/docs/concepts/services-networking/ingress/) to work in your cluster, there must be an _ingress controller_ running. You need to select at least one ingress controller and make sure it is set up in your cluster. This page lists co
kubernetes.io
부족한 내용은 kubernetes에서 확인하시어 찾아가길 바랍니다.^^
'서버인프라 > kubernetes' 카테고리의 다른 글
K8S 리셋 (30) | 2023.12.24 |
---|---|
[제 10강] Labels 사용 (0) | 2023.01.12 |
[제 8강] Service (2) | 2023.01.04 |
[제 7강] NameSapace (4) | 2022.12.29 |
[제 6강] Updating a Deployment (1) | 2022.12.27 |
댓글