## ArgoCD 배포 설정 가이드

### Ingress Enable시 사전 필요사항
- 특정 도메인에 대한 TLS 인증서를 사용한 Ingress 배포시 해당 Namespace에 tls secret이 생성되어 있어야 합니다.
  - 생성가이드
  ```
  $ kubectl create secret tls ${TLS_NAME} --cert=tls.crt --key=tls.key -n ${NAMESPACE}
  ```
- cert-manager를 사용하여 tls를 발급할 경우
  - custom-values.yaml 설정
  ```
  ingress:
    enabled: true
    annotations:
      cert-manager.io/cluster-issuer: "letsencrypt-prod"
    hosts:
      - host: argocd.example.com
        paths:
          - /
    tls:
      - secretName: ${TLS_NAME}
        hosts:
          - argocd.example.com
  ```


### custom-values.yaml
#### Global Configs

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| global.domain | string | `"argocd.example.com"` | ArgoCD에서 사용할 호스트네임을 지정합니다.|


#### ArgoCD Server Ingress

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| server.ingress.annotations | object | `{}` | ingress의 annotations 설정합니다. |
| server.ingress.enabled | bool | `false` | Ingress의 사용여부를 결정합니다. |
| server.ingress.extraTls | list | `[]` | Ingress의 TLS를 설정합니다. |
| server.ingress.hostname | string | `""` (defaults to global.domain) | ArgoCD의 호스트네임을 설정합니다. |
| server.ingress.ingressClassName | string | `""` | Ingress 리소스를 구현할 컨트롤러를 정의합니다.|
| server.ingress.labels | object | `{}` | Ingress에 추가할 Label을 정의합니다. |
| server.ingress.path | string | `"/"` | The path to Argo CD server |
| server.ingress.pathType | string | `"Prefix"` | Ingress path type. One of `Exact`, `Prefix` or `ImplementationSpecific` |


#### Kong Ingress Controller 사용 시 필요 설정

- argocd를 배포할 때, kong ingress controller를 사용하면 다음과 같은 kong의 설정이 필요합니다.
``` yaml
server:
  ingress:
    enabled: true
    annotations:
      # kong ingress controller 설정
      konghq.com/https-redirect-status-code: "301"
      konghq.com/preserve-host: "true"
      konghq.com/protocols: https
    hostname: argocd.example.org
    ingressClassName: "kong"
    extraTls:
      - hosts:
        - argocd.example.org
        secretName: argocd-tls
  service:
    annotations:
      # argocd에서 발생하는 too many redirect 발생 방지를 위해 추가
      konghq.com/protocol: https 
```