안녕하세요. 오늘은 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
자세한 사항은 위 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/
부족한 내용은 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 |
댓글