- 요구 사항
- 구성
- 설치 명령줄 옵션
- 차트 구성 예시
- 이 차트의 Community Edition 사용
- 전역 설정
- 배포 설정
- 인그레스 설정
- 리소스
- 외부 서비스
- 차트 설정
-
networkpolicy
구성 - KEDA 구성
GitLab Webservice 차트 사용하기
webservice
하위 차트는 GitLab Rails 웹서버에 두 개의 Webservice 워커를 제공하여, 단일 pod가 GitLab의 모든 웹 요청을 처리할 수 있는 최소한의 요구 사항입니다.
이 차트의 pods는 gitlab-workhorse
와 webservice
두 개의 컨테이너를 사용합니다. GitLab Workhorse는 8181
포트에서 듣고 있으며, 항상 pod로 들어오는 트래픽의 대상이어야 합니다. webservice
는 GitLab Rails codebase를 포함하고 있으며 8080
포트에서 듣고 있으며 메트릭 수집 목적으로 접근할 수 있습니다. webservice
는 절대로 직접 일반 트래픽을 수신해서는 안 됩니다.
요구 사항
이 차트는 Redis, PostgreSQL, Gitaly, 등과 같은 서비스들에 의존하며, GitLab 차트 전체의 일부로 제공되거나 이 차트가 배포된 Kubernetes 클러스터에서 접근 가능한 외부 서비스를 제공해야 합니다.
구성
webservice
차트는 다음과 같이 구성됩니다: 전역 설정, 배포 설정, Ingress 설정, 외부 서비스, 그리고 차트 설정.
설치 명령줄 옵션
다음 표는 helm install
명령을 사용하여 --set
플래그를 통해 제공할 수 있는 모든 차트 구성을 포함하고 있습니다.
매개변수 | 기본값 | 설명 |
---|---|---|
annotations
| Pod 주석 | |
podLabels
| Pod 라벨. 선택기로 사용되지 않을 것입니다. | |
common.labels
| 이 차트에 의해 생성된 모든 객체에 적용되는 추가 라벨 | |
… (중략) | ||
priorityClassName
| ""
| Pod의 priorityClassName 을 구성할 수 있으며, 이는 발생 시 우선 순위를 제어하는 데 사용됩니다.
|
차트 구성 예시
extraEnv
extraEnv
는 파드의 모든 컨테이너에 추가 환경 변수를 노출시킬 수 있게 합니다.
아래는 extraEnv
의 사용 예시입니다:
extraEnv:
SOME_KEY: some_value
SOME_OTHER_KEY: some_other_value
컨테이너가 시작되면 환경 변수가 노출되었는지 확인할 수 있습니다:
env | grep SOME
SOME_KEY=some_value
SOME_OTHER_KEY=some_other_value
extraEnvFrom
extraEnvFrom
은 파드의 모든 컨테이너에 다른 데이터 소스에서 추가 환경 변수를 노출시킬 수 있게 합니다. 이후의 변수들은 배포별로 덮어쓸 수 있습니다.
아래는 extraEnvFrom
의 사용 예시입니다:
extraEnvFrom:
MY_NODE_NAME:
fieldRef:
fieldPath: spec.nodeName
MY_CPU_REQUEST:
resourceFieldRef:
containerName: test-container
resource: requests.cpu
SECRET_THING:
secretKeyRef:
name: special-secret
key: special_token
# optional: boolean
deployments:
default:
extraEnvFrom:
CONFIG_STRING:
configMapKeyRef:
name: useful-config
key: some-string
# optional: boolean
image.pullSecrets
pullSecrets
를 사용하여 파드에 이미지를 끌어오기 위해 개인 레지스트리에 인증할 수 있습니다.
개인 레지스트리와 그들의 인증 방법에 대한 추가적인 정보는 Kubernetes 문서에서 찾을 수 있습니다.
아래는 pullSecrets
의 사용 예시입니다:
image:
repository: my.webservice.repository
pullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-name
tolerations
tolerations
을 사용하여 오염된 워커 노드에 파드를 예약할 수 있습니다.
아래는 tolerations
의 사용 예시입니다:
tolerations:
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoSchedule"
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoExecute"
annotations
annotations
을 사용하여 Webservice 파드에 주석을 추가할 수 있습니다. 예를 들어:
annotations:
kubernetes.io/example-annotation: annotation-value
strategy
deployment.strategy
를 사용하여 배포 업데이트 전략을 변경할 수 있습니다. 배포가 업데이트될 때 파드가 어떻게 재생성될지 정의합니다. 제공되지 않을 경우, 클러스터의 기본값이 사용됩니다. 예를 들어, 롤링 업데이트가 시작될 때 추가 파드를 생성하지 않고, max unavailable 파드를 50%로 변경하려면:
deployment:
strategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 50%
또한 업데이트 전략의 유형을 Recreate
로 변경할 수 있지만, 새로운 파드를 예약하기 전에 모든 파드를 종료시키고, 새로운 파드가 시작될 때까지 웹 UI가 사용 불가능하게 될 수 있으므로 주의가 필요합니다. 이 경우에는 rollingUpdate
를 정의할 필요가 없고, type
만 정의하면 됩니다:
deployment:
strategy:
type: Recreate
자세한 내용은 Kubernetes 문서를 참조하세요.
TLS
Webservice 파드는 두 개의 컨테이너를 실행합니다:
gitlab-workhorse
webservice
gitlab-workhorse
Workhorse는 웹 및 메트릭 엔드포인트 모두를 위해 TLS를 지원합니다. 이는 Workhorse와 다른 구성 요소 간의 통신을 보호합니다, 특히 nginx-ingress
, gitlab-shell
, 및 gitaly
. TLS 인증서에는 Workhorse 서비스 호스트 이름(예: RELEASE-webservice-default.default.svc
)이 공통 이름(CN) 또는 대체 이름(SAN)에 포함되어야 합니다.
Webservice의 여러 배포가 존재할 수 있으므로, 서비스 이름에 대한 TLS 인증서를 준비해야 합니다. 이는 여러 SAN 또는 와일드카드 인증서로 달성할 수 있습니다.
TLS 인증서가 생성되면, Kubernetes TLS 시크릿을 생성해야 합니다. 또한, TLS 인증서의 CA 인증서만을 포함하는 다른 시크릿을 생성해야 하는데, 이는 ca.crt
키만 포함하면 됩니다.
global.workhorse.tls.enabled
를 true
로 설정하여 gitlab-workhorse
컨테이너에서 TLS를 활성화할 수 있습니다. 그리고 gitlab.webservice.workhorse.tls.secretName
및 global.certificates.customCAs
에 사용자 지정 시크릿 이름을 전달할 수 있습니다.
gitlab.webservice.workhorse.tls.verify
가 true
일 때(기본값임), 자체 서명된 인증서와 사용자 지정 CA를 위해 CA 인증서 시크릿 이름을 gitlab.webservice.workhorse.tls.caSecretName
에 전달해야 합니다. 이것은 NGINX가 Workhorse의 TLS 인증서를 확인하기 위해 필요합니다.
global:
workhorse:
tls:
enabled: true
certificates:
customCAs:
- secret: gitlab-workhorse-ca
gitlab:
webservice:
workhorse:
tls:
verify: true
# secretName: gitlab-workhorse-tls
caSecretName: gitlab-workhorse-ca
monitoring:
exporter:
enabled: true
tls:
enabled: true
gitlab-workhorse
컨테이너의 메트릭 엔드포인트에 대한 TLS는 global.workhorse.tls.enabled
에서 상속됩니다. 메트릭 엔드포인트의 TLS는 Workhorse에 대해 TLS가 활성화되어 있는 경우에만 사용 가능합니다. 메트릭 리스너는 gitlab.webservice.workhorse.tls.secretName
에 지정된 TLS 인증서를 사용합니다.
메트릭 엔드포인트에 사용되는 TLS 인증서는 포함된 서브젝트 대체 이름(SANs)에 대해 추가적인 고려사항이 필요할 수 있습니다, 특히 포함된 Prometheus Helm 차트를 사용하는 경우. 자세한 정보는 TLS 활성화된 엔드포인트의 Prometheus 스크랩 구성을 참조하세요.
webservice
TLS를 활성화하는 주요 사례는 Prometheus 메트릭을 스크랩하는 HTTPS를 통한 암호화 제공입니다.
Prometheus가 /metrics/
엔드포인트를 HTTPS를 통해 스크랩하려면, 인증서의 CommonName
속성이나 SubjectAlternativeName
항목에 대한 추가 구성이 필요합니다. 해당 요구 사항은 TLS가 활성화된 엔드포인트를 스크랩하도록 Prometheus 구성을 참조하세요.
TLS는 gitlab.webservice.tls.enabled
설정으로 webservice
컨테이너에서 활성화할 수 있습니다:
gitlab:
webservice:
tls:
enabled: true
# secretName: gitlab-webservice-tls
secretName
은 Kubernetes TLS 시크릿을 가리켜야 합니다. 예를 들어, 로컬 인증서와 키로 TLS 시크릿을 만들려면:
kubectl create secret tls <시크릿 이름> --cert=path/to/puma.crt --key=path/to/puma.key
이 차트의 Community Edition 사용
기본적으로 Helm 차트는 GitLab의 Enterprise Edition을 사용합니다. 원하는 경우 Community Edition을 대신 사용할 수 있습니다. 두 버전 간의 차이에 대해 자세히 알아보기.
Community Edition을 사용하려면 image.repository
를
registry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ce
로
workhorse.image
를 registry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ce
로 설정하세요.
전역 설정
우리 차트들 사이에 일부 공통 전역 설정을 공유합니다. 일반 구성 옵션(예: GitLab 및 레지스트리 호스트명)에 대한 Globals Documentation를 참조하세요.
배포 설정
이 차트에는 여러 배포 객체 및 이에 관련된 리소스를 생성할 수 있는 기능이 있습니다. 이 기능을 통해 경로 기반 라우팅을 사용하여 GitLab 애플리케이션으로의 요청을 여러 세트의 Pods 사이에 분산할 수 있습니다.
이 Map의 키(default
는 이 예제에서)는 각각의 “이름”입니다. default
는 RELEASE-webservice-default
로 생성되는 배포, 서비스, HorizontalPodAutoscaler, PodDisruptionBudget, 그리고 선택적으로 Ingress를 가집니다.
제공되지 않은 속성은 gitlab-webservice
차트 기본값을 상속받습니다.
deployments:
default:
ingress:
path: # 상속하지 않음 또는 기본값 없음. 비활성화하려면 비워 두세요.
pathType: Prefix
provider: nginx
annotations:
# `ingress.anntoations` 상속
proxyConnectTimeout: # `ingress.proxyConnectTimeout` 상속
proxyReadTimeout: # `ingress.proxyReadTimeout` 상속
proxyBodySize: # `ingress.proxyBodySize` 상속
deployment:
annotations: # 맵
labels: # 맵
# `deployment` 상속
pod:
labels: # .podLabels에 대한 추가 라벨
annotations: # 맵
# .Values.annotations 상속
service:
labels: # .serviceLabels에 대한 추가 라벨
annotations: # .service.annotations에 대한 추가 어노테이션
# `service.annotations` 상속
hpa:
minReplicas: # .minReplicas 기본값
maxReplicas: # .maxReplicas 기본값
metrics: # HPA 메트릭 정의의 선택적 대체
# `hpa` 상속
pdb:
maxUnavailable: # `maxUnavailable` 상속
resources: # `webservice` 컨테이너의 `resources`
# `resources` 상속
workhorse: # 맵
# `workhorse` 상속
extraEnv: #
# `extraEnv` 상속
extraEnvFrom: #
# `extraEnvFrom` 상속
puma: # 맵
# `puma` 상속
workerProcesses: # `workerProcesses` 상속
shutdown:
# `shutdown` 상속
nodeSelector: # 맵
# `nodeSelector` 상속
tolerations: # 배열
# `tolerations` 상속
배포 Ingress
각 deployments
항목은 차트 전체 Ingress 설정을 상속합니다. 여기에 제공된 값은 그곳에서 제공된 값의 오버라이드합니다. path
를 제외한 모든 설정은 동일합니다.
webservice:
deployments:
default:
ingress:
path: /
api:
ingress:
path: /api
path
속성은 Ingress의 path
속성에 직접 적용되며, 각 서비스로 이동하는 URI 경로를 제어할 수 있습니다. 위의 예에서 default
는 캐치-올 경로로 작용하고, api
는 /api
아래의 모든 트래픽을 받습니다.
지정된 배포가 연결된 Ingress 리소스를 가질 수 없도록 비워 두어 트래픽을 받을 수 없도록 설정할 수 있습니다. 아래 예에서 internal-api
는 외부 트래픽을 받지 않습니다.
webservice:
deployments:
default:
ingress:
path: /
api:
ingress:
path: /api
internal-api:
ingress:
path:
인그레스 설정
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
ingress.apiVersion
| 문자열 |
apiVersion 필드에 사용할 값입니다.
| |
ingress.annotations
| 맵 | 아래 참조(위) | 이러한 주석은 모든 인그레스에 사용됩니다. 예를 들어: ingress.annotations."nginx\.ingress\.kubernetes\.io/enable-access-log"=true .
|
ingress.configureCertmanager
| 불리언 | 인그레스 주석 cert-manager.io/issuer 및 acme.cert-manager.io/http01-edit-in-place 를 토글합니다. 자세한 정보는 GitLab Pages의 TLS 요구 사항을 참조하십시오.
| |
ingress.enabled
| 불리언 | false
| 해당 서비스에 대한 인그레스 개체를 생성할지 여부를 제어하는 설정입니다. false 인 경우, global.ingress.enabled 설정 값이 사용됩니다.
|
ingress.proxyBodySize
| 문자열 | 512m
| 아래 참조. |
ingress.tls.enabled
| 불리언 | true
|
false 로 설정하면 GitLab 웹 서비스의 TLS를 비활성화합니다. 주로 인그레스 수준에서 TLS 종료를 사용할 수 없는 경우에 유용합니다. 예를 들어, 인그레스 컨트롤러 앞에 TLS 종료 프록시가있는 경우와 같이 유용합니다.
|
ingress.tls.secretName
| 문자열 | (비어 있음) | 유효한 인증서 및 GitLab URL에 대한 키를 포함하는 쿠버네티스 TLS 시크릿의 이름입니다. 설정되지 않은 경우 global.ingress.tls.secretName 값이 대신 사용됩니다.
|
ingress.tls.smardcardSecretName
| 문자열 | (비어 있음) | 활성화 된 경우 GitLab 스마트 카드 URL에 대한 유효한 인증서 및 키를 포함하는 쿠버네티스 TLS 시크릿의 이름입니다. 설정되지 않은 경우 global.ingress.tls.secretName 값이 대신 사용됩니다.
|
ingress.tls.useGeoClass
| 불리언 | false | Geo Ingress 클래스 (global.geo.ingressClass )로 IngressClass를 재정의합니다. 주요 Geo 사이트에 필요합니다.
|
주석
annotations
는 웹 서비스 인그레스에 주석을 설정하는 데 사용됩니다.
기본적으로 하나의 주석이 설정됩니다: nginx.ingress.kubernetes.io/service-upstream: "true"
.
이것은 NGINX에게 직접 서비스로부터 균형 잡힌 트래픽을 보내도록 알려줌으로써 웹 서비스 파드로 트래픽을 균형있게 분배하는 데 도움이 됩니다.
자세한 정보는 NGINX 문서를 참조하십시오.
이를 재정의하려면 다음과 같이 설정하십시오:
gitlab:
webservice:
ingress:
annotations:
nginx.ingress.kubernetes.io/service-upstream: "false"
프록시 본문 크기
proxyBodySize
는 NGINX 프록시 최대 본문 크기를 설정하는 데 사용됩니다. 기본보다 큰 Docker 이미지를 허용하는 데 일반적으로 필요합니다.
이는 Linux 패키지 설치의 nginx['client_max_body_size']
구성과 동등합니다.
대안 옵션으로 다음 두 매개변수 중 하나로 본문 크기를 설정할 수도 있습니다:
gitlab.webservice.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"
global.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"
추가 인그레스
extraIngress.enabled=true
로 설정하여 추가 인그레스를 배포할 수 있습니다. 추가 인그레스는 기본 인그레스와 동일한 설정을 지원하며 -extra
접미사가 있는 이름을 가집니다.
리소스
메모리 요청/한도
각 파드는 workerProcesses
와 같은 수의 워커를 생성하며 각각이 어느 정도의 메모리를 사용합니다.
권장 사항:
- 워커 당 최소 1.25GB (requests.memory
)
- 워커 당 최대 1.5GB 및 주요 워커에 1GB 추가 (limits.memory
)
필요한 리소스는 사용자의 워크로드에 따라 다르며 GitLab 애플리케이션의 변경 또는 업그레이드에 따라 미래에 변경될 수 있음에 유의하십시오.
기본값:
workerProcesses: 2
resources:
requests:
memory: 2.5G # = 2 * 1.25G
# limits:
# memory: 4G # = (2 * 1.5G) + 950M
4개의 워커가 구성된 경우:
workerProcesses: 4
resources:
requests:
memory: 5G # = 4 * 1.25G
# limits:
# memory: 7G # = (4 * 1.5G) + 950M
외부 서비스
Redis
Redis 문서는 globals 페이지에 통합되었습니다. 최신 Redis 구성 옵션을 확인하려면 이 페이지를 참조하십시오.
PostgreSQL
PostgreSQL 문서는 globals 페이지에 통합되었습니다. 최신 PostgreSQL 구성 옵션을 확인하려면 이 페이지를 참조하십시오.
Gitaly
Gitaly는 글로벌 설정에 의해 구성됩니다. Gitaly 구성 문서를 참조하십시오.
MinIO
minio:
serviceName: 'minio-svc'
port: 9000
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
port
| 정수 | 9000
| MinIO Service 에 액세스하는 포트 번호.
|
serviceName
| 문자열 | minio-svc
| MinIO 팟에서 노출된 Service 의 이름.
|
Registry
registry:
host: registry.example.com
port: 443
api:
protocol: http
host: registry.example.com
serviceName: registry
port: 5000
tokenIssuer: gitlab-issuer
certificate:
secret: gitlab-registry
key: registry-auth.key
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
api.host
| 문자열 | 사용할 레지스트리 서버의 호스트 이름. 이는 api.serviceName 대신에 생략될 수 있습니다.
| |
api.port
| 정수 | 5000
| 레지스트리 API에 연결할 포트. |
api.protocol
| 문자열 | Webservice가 레지스트리 API에 액세스하는 데 사용해야 할 프로토콜. | |
api.serviceName
| 문자열 | registry
| 레지스트리 서버를 운영하는 service 의 이름.이 값이 있고 api.host 가 없는 경우, 차트는 api.host 값 대신에 서비스의 호스트 이름 (및 현재.Release.Name )을 템플릿화합니다. 레지스트리를 전체 GitLab 차트의 일부로 사용하는 경우 편리합니다.
|
certificate.key
| 문자열 |
registry 컨테이너가 auth.token.rootcertbundle 로 제공할 인증서 번들을 보유하는 Secret 의 키의 이름.
| |
certificate.secret
| 문자열 | GitLab 인스턴스에서 생성된 토큰을 검증하는 데 사용될 인증서 번들을 보유하는 Kubernetes Secret의 이름. | |
host
| 문자열 | GitLab UI에서 사용자에게 Docker 명령을 제공하는 데 사용할 외부 호스트 이름. global.hosts 에서 설정된 값에 따라 후퇴합니다. global.hosts 에서 설정된 값에 따라 레지스트리 호스트 이름을 결정하는 registry.hostname 템플릿에 대한 값으로 후퇴합니다. 자세한 내용은 Globals Documentation을 참조하십시오.
| |
port
| 정수 | 호스트 이름에 사용되는 외부 포트. 포트 80 또는443 을 사용하면 URL이 http /https 로 형성됩니다. 다른 포트는 모두 http 를 사용하고 호스트 이름 끝에 포트를 추가합니다. 예를 들어 http://registry.example.com:8443 .
| |
tokenIssuer
| 문자열 | gitlab-issuer
| 인증 토큰 발급자의 이름. 토큰이 전송될 때에 토큰에 통합되므로 레지스트리의 구성에서 사용되는 이름이어야 합니다. 기본값 gitlab-issuer 은 레지스트리 차트에서 사용하는 기본값과 동일합니다.
|
차트 설정
다음 값들은 Webservice 팟을 구성하는 데 사용됩니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
replicaCount
| 정수 | 1
| 배포에서 생성할 Webservice 인스턴스의 수. |
workerProcesses
| 정수 | 2
| 팟 당 실행할 Webservice 워커의 수. GitLab이 올바르게 기능하기 위해서는 클러스터에 적어도 2 개의 사용 가능한 워커가 있어야 합니다. workerProcesses 을 증가시키면 워커 당 약 400MB 의 메모리가 필요하기 때문에 팟 리소스 를 이에 따라 업데이트해야 합니다.
|
메트릭
메트릭은 metrics.enabled
값으로 활성화할 수 있으며 GitLab 모니터링 익스포터를 사용하여 메트릭 포트를 노출합니다. 팟에는 Prometheus 주석이 부여되거나 metrics.serviceMonitor.enabled
가 true
인 경우 Prometheus Operator ServiceMonitor가 생성됩니다. 메트릭은 /-/metrics
엔드포인트에서 스크랩되거나 관리자 영역에서 GitLab Prometheus 메트릭이 활성화되어야 합니다. GitLab Workhorse 메트릭은 workhorse.metrics.enabled
를 통해 노출될 수 있지만, 이러한 메트릭은 Prometheus 주석을 사용하여 수집할 수 없으므로, workhorse.metrics.serviceMonitor.enabled
가 true
로 설정되어야 하거나 외부 Prometheus 구성이 필요합니다.
GitLab Shell
GitLab Shell은 Webservice와의 통신에서 Auth Token을 사용합니다. GitLab Shell과 Webservice간에 공유하는 Secret을 사용하여 토큰을 공유하세요.
shell:
authToken:
secret: gitlab-shell-secret
key: secret
port:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
authToken.key
| String | secret(아래)에 있는 authToken을 포함하는 키의 이름을 정의합니다. | |
authToken.secret
| String | 가져올 Kubernetes Secret 의 이름을 정의합니다.
| |
port
| Integer | 22
| GitLab UI 내에서 SSH URL 생성에 사용할 포트 번호입니다. global.shell.port 로 제어됩니다.
|
WebServer 옵션
현재 차트의 버전은 Puma 웹 서버를 지원합니다.
Puma 고유 옵션:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
puma.workerMaxMemory
| Integer | Puma 워커 킬러의 최대 메모리(메가바이트) | |
puma.threads.min
| Integer | 4
| Puma 스레드의 최소 양 |
puma.threads.max
| Integer | 4
| Puma 스레드의 최대 양 |
networkpolicy
구성
이 섹션은 NetworkPolicy를 제어합니다. 이 구성은 선택 사항이며 Pod의 Egress 및 Ingress를 특정 엔드포인트로 제한하는 데 사용됩니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| Boolean | false
| 이 설정은 NetworkPolicy 를 활성화합니다.
|
ingress.enabled
| Boolean | false
|
true 로 설정하면 Ingress 네트워크 정책이 활성화됩니다. 이렇게 하면 규칙이 지정되지 않는 한 모든 Ingress 연결이 차단됩니다.
|
ingress.rules
| Array | []
| Ingress 정책의 규칙에 대한 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 및 아래 예제를 참조하세요. |
egress.enabled
| Boolean | false
|
true 로 설정하면 Egress 네트워크 정책이 활성화됩니다. 이렇게 하면 규칙이 지정되지 않는 한 모든 Egress 연결이 차단됩니다.
|
egress.rules
| Array | []
| Egress 정책의 규칙에 대한 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 및 아래 예제를 참조하세요. |
네트워크 정책 예시
웹서비스 서비스는 활성화된 경우 Prometheus 익스포터 및 NGINX Ingress에서만 Ingress 연결을 필요로 하며 일반적으로 다양한 위치로의 Egress 연결이 필요합니다. 이 예시는 다음과 같은 네트워크 정책을 추가합니다.
- TCP
10.0.0.0/8
네트워크에서 메트릭 익스포팅과 NGINX Ingress를 위한 모든 Ingress 요청이 허용됩니다. - 일반 서비스 운영을 위해 포트 8181로의 모든 Ingress 요청이 허용됩니다.
- UDP
10.0.0.0/8
네트워크로의 모든 DNS에 대한 Egress 요청이 허용됩니다. - TCP
10.0.0.0/8
네트워크로의 모든 PostgreSQL에 대한 Egress 요청이 허용됩니다. - TCP
10.0.0.0/8
네트워크로의 모든 Redis에 대한 Egress 요청이 허용됩니다. - TCP
10.0.0.0/8
네트워크로의 모든 Gitaly에 대한 Egress 요청이 허용됩니다. - 로컬 네트워크의
10.0.0.0/8
외의 다른 Egress 요청이 제한됩니다. -
10.0.0.0/8
외의 Egress 요청이 허용됩니다.
제시된 예시는 단순 예시이며 완벽하지 않을 수 있습니다.
웹서비스는 외부 객체 스토리지에 이미지를 위해 공개 인터넷과의 아웃바운드 연결을 필요로 합니다.
networkpolicy:
enabled: true
ingress:
enabled: true
rules:
- from:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 8080
- from:
ports:
- port: 8181
egress:
enabled: true
rules:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 53
protocol: UDP
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 5432
protocol: TCP
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 6379
protocol: TCP
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 8075
protocol: TCP
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8
로드밸런서 서비스
만약 service.type
이 LoadBalancer
로 설정되어 있다면, 클라우드 프로바이더가 지원하는 경우 사용자가 지정한 IP로 LoadBalancer
를 생성할 수 있는 service.loadBalancerIP
를 선택적으로 지정할 수 있습니다.
service.type
이 LoadBalancer
로 설정되어 있는 경우에는 클라우드 프로바이더가 지원하는 경우에 service.loadBalancerSourceRanges
를 설정하여 LoadBalancer
에 액세스할 수 있는 CIDR 범위를 제한해야 합니다. 현재 이 작업은 메트릭 포트가 노출되는 문제 때문에 필수입니다.
LoadBalancer
서비스 유형에 대한 추가 정보는 Kubernetes 문서에서 확인할 수 있습니다.
service:
type: LoadBalancer
loadBalancerIP: 1.2.3.4
loadBalancerSourceRanges:
- 10.0.0.0/8
KEDA 구성
이 keda
섹션은 일반적인 HorizontalPodAutoscalers
대신 KEDA ScaledObjects
를 설치할 수 있게 합니다. 이 구성은 선택 사항이며, 사용자 정의 또는 외부 메트릭을 기반으로 자동 확장이 필요한 경우에 사용할 수 있습니다.
대부분의 설정은 해당되는 경우 hpa
섹션에 설정된 값을 기본값으로 합니다.
다음과 같은 경우 CPU 및 메모리 트리거가 자동으로 추가되며, 해당 트리거가 활성화됩니다. 이는 triggers
가 설정되지 않은 경우나 해당하는 request.cpu.request
또는 request.memory.request
설정이 0이 아닌 값으로 설정되어 있는 경우에 해당합니다.
-
triggers
가 설정되어 있지 않은 경우 - 해당하는
request.cpu.request
또는request.memory.request
설정이 0이 아닌 값으로 설정되어 있는 경우
트리거가 설정되어 있지 않은 경우 ScaledObject
가 생성되지 않습니다.
더 자세한 정보는 KEDA 문서를 참조하세요.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
| 일반적인 HorizontalPodAutoscalers 대신 KEDA ScaledObjects 를 사용합니다.
|
pollingInterval
| 정수 | 30
| 각 트리거를 확인하는 간격 |
cooldownPeriod
| 정수 | 300
| 스케일링된 리소스를 0으로 다시 축소하기 전에 마지막 트리거가 활성화된 후 기다리는 기간 |
minReplicaCount
| 정수 | KEDA가 리소스를 축소할 최소 레플리카 수. 기본값은 minReplicas 로 설정됩니다.
| |
maxReplicaCount
| 정수 | KEDA가 리소스를 늘릴 수 있는 최대 레플리카 수. 기본값은 maxReplicas 로 설정됩니다.
| |
fallback
| 맵 | KEDA 대체 구성, 문서 참조 | |
hpaName
| 문자열 | KEDA가 생성할 HPA 리소스의 이름. 기본값은 keda-hpa-{scaled-object-name} 로 설정됩니다.
| |
restoreToOriginalReplicaCount
| 부울 |
ScaledObject 가 삭제된 후 대상 리소스를 원래 레플리카 수로 다시 확장해야 하는지 여부를 지정합니다.
| |
behavior
| 맵 | 올바르게 확장 및 축소하는 동작에 대한 사양. 기본값은 hpa.behavior 로 설정됩니다.
| |
triggers
| 배열 | 대상 리소스의 스케일링을 활성화할 트리거 목록. 기본값은 hpa.cpu 및 hpa.memory 에서 계산된 트리거입니다.
|