10.7.6. 오브젝트 필드 노출
템플릿 작성자는 템플릿의 특정 오브젝트 필드가 노출되어야 함을 나타낼 수 있습니다. 템플릿 서비스 브로커는 ConfigMap, Secret, Service, Route 오브젝트에서 노출된 필드를 인식하고 브로커가 지원하는 서비스를 바인딩할 때 노출된 필드의 값을 반환합니다.
오브젝트의 필드를 하나 이상 노출하려면 template.openshift.io/expose-
또는 template.openshift.io/base64-expose-
로 접두사를 붙인 주석을 템플릿의 오브젝트에 추가합니다.
접두사가 제거된 각 주석 키는 전달되어 bind
응답의 키가 됩니다.
각 주석 값은 Kubernetes JSONPath 표현식 이며, 바인딩 시 이를 해석하여 bind
응답에서 값을 반환해야 하는 오브젝트 필드를 나타냅니다.
Bind
응답 키/값 쌍은 시스템의 다른 부분에서 환경 변수로 사용될 수 있습니다. 따라서 접두사가 제거된 모든 주석 키는 A-Z
,a-z
또는 밑줄 문자 A-Z
, a-z ,a-z
,0-9
, 또는 밑줄로 사용 하 여 유효한 환경 변수 이름을 사용 하는 것이 좋습니다.
template.openshift.io/expose-
주석을 사용하여 필드 값을 문자열로 반환합니다. 이 주석을 사용하면 임의의 바이너리 데이터를 처리하지는 않지만 편리합니다. 바이너리 데이터를 반환하려면 template.openshift.io/base64-expose-
주석을 사용하여 데이터를 반환하기 전에 base64로 인코딩합니다.
백슬래시로 이스케이프되지 않으면 Kubernetes JSONPath 구현에서는 .
, @
및 메타 문자와 같은 기타 문자를 표현식 내 위치에 관계없이 문자로 해석합니다. 따라서 예를 들어 my.key
라는 ConfigMap
데이터를 참조하기 위해 필요한 JSONPath 표현식은 {.data['my\.key']}
입니다. JSONPath 표현식이 YAML로 작성되는 방법에 따라 추가 백슬래시가 필요할 수도 있습니다(예: "{.data['my\\.key']}"
).
다음은 노출되는 다양한 오브젝트 필드의 예입니다.
kind: Template apiVersion: v1 metadata: name: my-template objects: - kind: ConfigMap apiVersion: v1 metadata: name: my-template-config annotations: template.openshift.io/expose-username: "{.data['my\\.username']}" data: my.username: foo - kind: Secret apiVersion: v1 metadata: name: my-template-config-secret annotations: template.openshift.io/base64-expose-password: "{.data['password']}" stringData: password: bar - kind: Service apiVersion: v1 metadata: name: my-template-service annotations: template.openshift.io/expose-service_ip_port: "{.spec.clusterIP}:{.spec.ports[?(.name==\"web\")].port}" spec: ports: - name: "web" port: 8080 - kind: Route apiVersion: v1 metadata: name: my-template-route annotations: template.openshift.io/expose-uri: "http://{.spec.host}{.spec.path}" spec: path: mypath
위의 부분적인 템플릿을 기반으로 하는 bind
작업에 대한 응답 예는 다음과 같습니다.
{ "credentials": { "username": "foo", "password": "YmFy", "service_ip_port": "172.30.12.34:8080", "uri": "http://route-test.router.default.svc.cluster.local/mypath" } }