Ingress 소개
https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
Ingress는 kubernetes cluster 내의 서비스에 대한 외부 접근을 관리하는 API Object이고 일반적으로 http를 관리한다.
로컬에 kubernetes를 설치하고 점점 pod가 늘어나기 시작하면서 port를 분배하여 사용하는 서비스를 호출하는 게 점점 버거워지기 시작했다.
localhost:30000은 어떤 서비스인지 localhost:30120은 어떤 서비스인지 일일이 기억하기 힘들어서 매번 매칭하는 표를 찾아서 찾아갔다.
이럴 때 jenkins.bluesky.local, nexus.bluesky.local 같이 도메인 주소를 사용하면 서비스별로 기억하기 쉽다.
kubernetes ingress를 사용하면 설정한 도메인으로 접근할 수 있기 때문에 port 번호를 일일이 찾을 필요가 없다.
Ingress 설정
IngressController 설정하기
Ingress를 사용하기 위해서는 IngressController가 먼저 설정되어 있어야 한다.
https://kubernetes.io/ko/docs/concepts/services-networking/ingress-controllers/
IngressController의 경우 AWS, GCE. nginx를 지원하고 그에 대한 다양한 써드파티가 있다.
그중 하나 또는 여러 개를 설정하고 사용할 수도 있다.
nginx의 경우 아래에서 추가할 수 있다.
https://github.com/kubernetes/ingress-nginx
tag에서 controller를 검색하고 선택한다.
이 글을 작성한 시점엔 1.5.1이 가장 최신 버전이다.
해당 버전의 tag를 선택하고 deploy/static/provider/cloud/deploy.yaml을 찾는다.
해당 파일을 적용하면 된다.
C:\Users\bluesky>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/cloud/deploy.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx unchanged
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission unchanged
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx unchanged
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission unchanged
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
deployment.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx unchanged
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission configured
Ingress 설정하기
개인적으로 사용한 Ingress 설정은 다음과 같다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: bluesky-default-ingress
namespace: default
spec:
ingressClassName: nginx
rules:
- host: jenkins.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jenkins-service
port:
number: 8080
- host: nexus.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nexus-service
port:
number: 8082
- host: minio.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minio-service
port:
number: 9090
- host: eureka.cloud.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluesky-cloud-netflix-eureka-server-service
port:
number: 30100
- host: config.cloud.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluesky-cloud-config-server-service
port:
number: 30101
- host: admin.cloud.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluesky-cloud-admin-server-service
port:
number: 30102
- host: swagger.web.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluesky-web-swagger-ui-service
port:
number: 30120
- host: bookkeeping.api.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluesky-api-bookkeeping-service
port:
number: 30130
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: bluesky-spinnaker-ingress
namespace: spinnaker
spec:
ingressClassName: nginx
rules:
- host: spinnaker.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: spin-deck
port:
number: 9000
- host: spinnaker.gate.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: spin-gate
port:
number: 8084
해당 설정을 host파일에 다음과 같이 추가하였다.
127.0.0.1 jenkins.bluesky.local
127.0.0.1 nexus.bluesky.local
127.0.0.1 minio.bluesky.local
127.0.0.1 eureka.cloud.bluesky.local
127.0.0.1 config.cloud.bluesky.local
127.0.0.1 admin.cloud.bluesky.local
127.0.0.1 swagger.web.bluesky.local
127.0.0.1 bookkeeping.api.bluesky.local
127.0.0.1 spinnaker.bluesky.local
127.0.0.1 spinnaker.gate.bluesky.local
이제 port 번호를 찾는 번거로움 없이 바로 브라우저에서 http://xxx.bluesky.local과 같이 입력하여 호출하면 된다.
또한 각각의 pod에 대해 노출할 port를 따로 각각의 service로 설정하지 않아도 된다.
위에서는 IngressController를 설치하고 Ingress를 설정할 때 대상 IngressClass를 "ingressClassName"으로 지정하였다.
만약 IngressClass 중에 metatdata.annotations에 ingressclass.kubernetes.io/is-default-class: "true"가 설정되어 있는 경우 기본 Ingress로 지정된 것으로 Ingress에서 "ingressClassName" 설정을 생략하는 경우 기본 IngressClass를 사용하게 된다
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
labels:
app.kubernetes.io/component: controller
name: nginx-example
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: k8s.io/ingress-nginx
Rancher Desktop의 경우 IngressClassName을 지정하면 동작하지 않았고 해당 설정을 제거하면 기본 IngressClass를 찾는 것인지 동작하였다.
(kubectl get IngressClass로는 보이지 않았다.)
이 부분은 왜 그런 건지 원인을 찾지는 못했다.
'Study > CI&CD' 카테고리의 다른 글
Nexus 3.71.0 버전 이후 OrientDB 지원 중단 관련 설정 변경하기 (0) | 2024.11.06 |
---|---|
Argo CD 사용해 보기 (1) | 2024.03.19 |
spinnaker CD 연동해 보기 (4) - pipeline template 사용해 보기 (0) | 2023.01.10 |
spinnaker CD 연동해 보기 (3) - jenkins parameter 사용, kubernetes livenessProbe, readinessProbe 설정 (0) | 2023.01.01 |
kubernetes pods 에서 curl 테스트 해보기 (0) | 2022.12.27 |
spinnaker CD 연동해 보기 (2) - deploy manifest artifact 사용, SpEL 사용 (0) | 2022.12.26 |
spinnaker CD 연동해 보기 - jenkins, kubernetes 연동, pipeline 사용 (0) | 2022.12.22 |
(Docker Desktop & Rancher Desktop) docker insecure registries 설정하기 (0) | 2022.12.21 |
로컬 kubernetes에 Spinnaker 설치해 보기 (0) | 2022.12.18 |
[troubleshooting] sonarqube 사용 시 socket timeout 발생 (0) | 2022.07.09 |