환경 변수 설정

Knative serving에서 환경 변수를 만들고 사용하는 방법을 알아봅니다.

환경 변수를 설정하면 이러한 변수가 컨테이너에 삽입되고 코드에서 액세스할 수 있습니다. 환경 변수는 키-값 쌍으로 설정됩니다. 예를 들어 환경에서 LOGGING_VERBOSE: true를 읽으면 추가 로깅을 사용 설정하는 서비스를 실행한다고 가정해 보겠습니다. 이 시나리오에서는 환경 변수 키-값 쌍을 LOGGING_VERBOSE=true로 설정합니다. 정확한 명령어 또는 UI는 다음 섹션에 나와 있습니다.

예약된 이름

컨테이너 런타임 계약에 정의된 환경 변수는 예약되어 있으며 설정할 수 없습니다. 특히 PORT 환경 변수는 Knative serving을 통해 컨테이너 내부에 삽입되므로 직접 설정해서는 안 됩니다.

서비스에 환경 변수 설정

구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.

서비스를 배포하거나 기존 서비스를 업데이트하고 버전을 배포하는 경우 Google Cloud 콘솔, Google Cloud CLI 또는 YAML 파일을 사용하여 환경 변수를 설정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Knative serving으로 이동합니다.

    Knative serving으로 이동

  2. 배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하려면 해당 서비스를 클릭한 다음 새 버전 수정 및 배포를 클릭합니다.

  3. 고급 설정에서 변수 및 보안 비밀을 클릭합니다.

  4. 다음 단계를 따르세요.

    • 변수를 추가하려면 변수 추가를 클릭하고 이름 텍스트 상자에 변수의 이름과 해당 값을 지정합니다.
    • 변수의 값을 변경하려면 텍스트 상자의 현재 값을 원하는 값으로 바꿉니다.
    • 1개 이상의 환경 변수를 삭제하려면 마우스 커서를 삭제할 변수의 텍스트 상자 왼쪽으로 가져가서 휴지통 아이콘을 표시하고 클릭합니다.

  5. 다음을 클릭하여 다음 섹션으로 진행합니다.

  6. 이 서비스가 트리거되는 방식 구성 섹션에서 서비스를 호출하는 데 사용할 연결을 선택합니다.

  7. 만들기를 클릭하여 Knative serving에 이미지를 배포하고 배포가 완료될 때까지 기다립니다.

명령줄

Google Cloud CLI를 사용하여 새 서비스의 환경 변수를 설정하거나 기존 서비스를 업데이트할 수 있습니다.

  • 기존 서비스의 경우 다음 매개변수 중 하나를 사용하여 gcloud run services update 명령어를 실행해 환경 변수를 업데이트합니다.

    예를 들면 다음과 같습니다.

    gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2

    다음과 같이 바꿉니다.

    • SERVICE를 서비스 이름으로 바꿉니다.
    • KEY1=VALUE1,KEY2=VALUE2를 각 환경 변수의 이름 및 쉼표로 구분된 값 쌍 목록으로 바꿉니다. 각 KEY에 환경 변수 이름을, VALUE에 환경 변수 값을 지정합니다. 여러 매개변수를 지정하는 방법을 알아보세요.
    • 명령어 매개변수 옵션

      • 쉼표가 포함된 환경 변수(,)를 지정하려면 각 KEY=VALUE를 다른 구분 기호로 이스케이프 처리해야 합니다. 예를 들어 @를 사용하는 경우는 다음과 같습니다.
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • 여러 키-값 쌍 집합을 지정하려면 가독성을 위한 여러 매개변수를 지정하면 됩니다. 예를 들면 다음과 같습니다.
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
  • 새 서비스의 경우 --set-env-vars 매개변수를 사용하여 gcloud run deploy 명령어를 실행해 환경 변수를 설정합니다.

    gcloud run deploy SERVICE --image=IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2

    다음과 같이 바꿉니다.

    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: gcr.io/cloudrun/hello)로 바꿉니다.
    • SERVICE를 서비스 이름으로 바꿉니다.
    • KEY1=VALUE1,KEY2=VALUE2를 각 환경 변수의 이름 및 쉼표로 구분된 값 쌍 목록으로 바꿉니다. 각 KEY에 환경 변수 이름을, VALUE에 환경 변수 값을 지정합니다. 여러 매개변수를 지정하는 방법을 알아보세요.
    • 명령어 매개변수 옵션

      • 쉼표가 포함된 환경 변수(,)를 지정하려면 각 KEY=VALUE를 다른 구분 기호로 이스케이프 처리해야 합니다. 예를 들어 @를 사용하는 경우는 다음과 같습니다.
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • 여러 키-값 쌍 집합을 지정하려면 가독성을 위한 여러 매개변수를 지정하면 됩니다. 예를 들면 다음과 같습니다.
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"

YAML

--format=export 플래그를 사용하여 gcloud run services describe 명령어로 YAML 파일에 기존 서비스 구성을 다운로드할 수 있습니다. 그런 다음 gcloud run services replace 명령어로 YAML 파일을 수정하고 변경사항을 배포할 수 있습니다. 지정된 속성만 수정해야 합니다.

  1. 서비스 구성을 로컬 작업공간의 service.yaml 파일에 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.

  2. 로컬 파일의 containers: 아래에 있는 env 속성에서 namevalue 속성을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - env:
            - name: KEY-1
              value: VALUE-1
            - name: KEY-N
              value: VALUE-N

    바꾸기

    • SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
    • KEY-1VALUE-1을 각각 환경 변수와 값으로 바꿉니다. 필요에 따라 변수와 값을 더 추가해도 됩니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

컨테이너에 기본 환경 변수 설정

Dockerfile에서 ENV 문을 사용하여 환경 변수의 기본값을 설정할 수 있습니다.

ENV KEY1=VALUE1,KEY2=VALUE2

우선 순위: 컨테이너와 서비스 변수 비교

컨테이너에서 기본 환경 변수를 설정하고 Knative serving 서비스에서도 이름이 같은 환경 변수를 설정하면 서비스에 설정된 값이 우선 적용됩니다.

Kubernetes 서비스 링크를 사용하려면 수동으로 지원을 사용 설정해야 합니다. 서비스와 버전이 수천 개 포함된 네임스페이스에서 발생하는 성능 문제로 인해 2021년 1월부터 Kubernetes 서비스 링크가 기본적으로 중지됩니다.

Kubernetes 서비스 링크를 사용 설정하려면 다음 명령어를 실행하여 knative-serving/config-defaults ConfigMap에서 data.enable-service-linkstrue로 설정합니다.

kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}