Distributed Cloud connected는 여러 Google Cloud 서비스의 배포를 지원합니다. 이러한 서비스 워크로드는 Distributed Cloud 연결 클러스터의 Kubernetes 컨테이너에서 실행됩니다.
지원되는 Google Cloud 서비스
Distributed Cloud connected는 다음Google Cloud 서비스의 배포를 지원합니다.
| 서비스 유형 | GDC 연결 비용에 포함됨 | 별도로 청구됩니다. |
|---|---|---|
| 컴퓨팅 | 소프트웨어 전용 Google Distributed Cloud Google Distributed Cloud의 VM 런타임 |
게스트 운영체제 (자체 라이선스를 획득해야 함) |
| 스토리지 | 원시 (영구 볼륨) 스토리지 컨테이너 스토리지 인터페이스 (CSI) 하이브리드 스토리지 |
소프트웨어 정의 스토리지(SDS)(예: Symcloud Storage)(자체 라이선스를 획득해야 함) |
| 네트워킹 | Edge Network API VLAN 지원 GKE 맞춤 네트워크 인터페이스 (CNI) 플러그인 GKE 번들 L4 부하 분산기 |
해당 없음 |
| AI/ML | 컨테이너에 AutoML 모델 배포 | 해당 없음 |
| 데이터베이스 | 없음 | AlloyDB Omni (프리뷰) MongoDB와 같은 서드 파티 데이터베이스 솔루션 (자체 라이선스를 획득해야 함) |
| 관측 가능성 | Cloud Logging Cloud Monitoring Cloud Logging API GDCc 로그 및 측정항목 |
연결이 끊긴 관측 가능성을 위한 Prometheus 애플리케이션 수준의 맞춤 로그 및 측정항목 |
| 구성 관리 | 구성 동기화 Fleet 패키지 (미리보기) |
해당 없음 |
| 관리 | Google Cloud 콘솔 의 Google Kubernetes Engine 대시보드 게이트웨이 연결 kubectl 로컬 도구분산 클라우드 연결 소프트웨어 업그레이드 |
해당 없음 |
| 보안 | Cloud Key Management Service 통합 자체 암호화 디스크 (SED) 드라이브 Fleet 워크로드 ID 감사 로깅 |
해당 없음 |
기본 요건
Distributed Cloud Connected에 Google Cloud 서비스를 배포하려면 이 섹션에 나열된 기본 요건을 완료해야 합니다.
클러스터 사용자 인증 정보 가져오기
다음 명령어를 사용하여 대상 클러스터에 액세스하기 위한 사용자 인증 정보를 가져옵니다.
gcloud container hub memberships get-credentials CLUSTER_ID \
--project="PROJECT_ID"
다음을 바꿉니다.
CLUSTER_ID: 대상 클러스터의 이름입니다.PROJECT_ID: 대상 Google Cloud 프로젝트의 ID입니다.
클러스터 만들기 또는 선택
아직 만들지 않았다면 클러스터 만들기에 설명된 대로 Distributed Cloud 연결 클러스터를 만듭니다. 클러스터를 만들 때 가상 IP 주소 (VIP)를 8개 이상 지정합니다. 이러한 VIP는 Google Cloud 서비스 워크로드를 실행하는 Kubernetes 컨테이너에서 사용됩니다.
기존 클러스터를 사용하는 경우 다음 명령어를 사용하여 해당 클러스터에서 사용 가능한 VIP가 충분한지 확인합니다.
kubectl get cluster --all-namespaces -o jsonpath="{.items[0].spec.loadBalancer.addressPools}"
이 명령어는 다음과 유사한 출력을 반환합니다.
[
{
"addresses": [
"10.200.11.188-10.200.11.196"
],
"name": "loadBalancerAddressPool-1"
}
]
클러스터에 프로비저닝된 VIP가 부족하면 다음 오류가 표시됩니다. 여기서 n는 필요한 VIP 수이고 m는 클러스터에서 검색된 VIP 수입니다.
Cluster has less than n external IPs, got m.
이 오류가 발생하면 VIP 수가 충분한 클러스터를 삭제하고 다시 만들어야 합니다.
Google Cloud 서비스 하위 도메인 구성
Distributed Cloud(연결형) 영역에 첫 번째 Google Cloud 서비스를 배포하기 전에 해당 영역에 배포된 모든 Google Cloud 서비스가 연결을 수신할 하위 도메인을 맞춤설정할 수 있습니다. Distributed Cloud 영역에 하나 이상의 서비스를 배포한 후에는 이 하위 도메인을 수정할 수 없습니다.
다음 명령어를 사용하여 하위 도메인 구성을 확인합니다.
kubectl -n dns-system get celldns cell-dns -o yaml
이 명령어는 다음과 유사한 출력을 반환합니다.
apiVersion: system.private.gdc.goog/v1alpha1
kind: CellDNS
metadata:
name: cell-dns
namespace: dns-system
spec:
delegatedSubdomain: private.goog
다음 명령어를 사용하여 하위 도메인 구성을 수정합니다.
kubectl -n dns-system edit celldns cell-dns
Distributed Cloud Connected에 Google Cloud 서비스 배포
Distributed Cloud에 연결된 클러스터에 Google Cloud 서비스를 배포하려면 해당 서비스의 문서에 설명된 배포 단계를 따르세요.
배포된 Google Cloud 서비스 구성
이 섹션에서는 비즈니스 요구사항에 따라 완료할 수 있는 배포 후 구성 단계를 설명합니다.
내부 DNS에서 클러스터의 DNS로 DNS 쿼리 전달
Distributed Cloud(연결형) 클러스터에 Google Cloud 서비스를 배포하면 해당 서비스 전용 DNS 서버가 클러스터에 배포됩니다. 서비스의 하위 도메인에 대한 DNS 쿼리를 클러스터에 새로 생성된 DNS 서버로 전달하는 것이 좋습니다.
다음 명령어를 사용하여 클러스터 하위 도메인을 가져옵니다.
CLUSTER_SUBDOMAIN=$(kubectl get configmap -n \ $(kubectl get clusters -A -o jsonpath="{.items[0].metadata.namespace}") \ dns-prefix -o jsonpath="{.data.dnsPrefix}") DELEGATED_SUBDOMAIN=$(kubectl get celldns -n dns-system cell-dns -o \ jsonpath="{.spec.delegatedSubdomain}") CLUSTER_FQDN="${CLUSTER_SUBDOMAIN?}.${DELEGATED_SUBDOMAIN?}" echo "${CLUSTER_FQDN?}"마지막 명령어는 다음과 유사한 출력을 반환합니다.
my-zone.google.private.goog다음 명령어를 사용하여 클러스터 내 DNS 서버의 VIP를 가져옵니다.
DNS_EXT_IP=$(k -n dns-system get service gpc-coredns-external-tcp -o "jsonpath={.status.loadBalancer.ingress[0].ip}")배포된 Google Cloud 서비스에 대한 DNS 쿼리를 이전 단계에서 얻은 VIP로 전달하도록 내부 DNS 서버를 구성합니다. 예를 들면 다음과 같습니다.
dnsmasq의 경우/etc/dnsmasq.conf에 다음을 추가합니다.server=/${CLUSTER_FQDN?}/${DNS_EXT_IP?}CoreDNS의 경우 Corefile에 다음을 추가합니다.
${CLUSTER_FQDN?}:53 { errors cache 30 forward . ${DNS_EXT_IP?} { max_concurrent 1000 } }
DNS 변환 테스트
다음 dig 명령어를 사용하여 도메인이 올바르게 확인되는지 테스트합니다. ANSWER SECTION에 특히 주의하세요.
dig "ais-core.${CLUSTER_FQDN?}"
이 명령어는 다음과 유사한 출력을 반환합니다.
...
;; ANSWER SECTION:
ais-core.my-zone.google.private.goog. 300 IN A 10.200.0.0
...
배포된 Google Cloud 서비스의 자체 서명 인증서 가져오기
Distributed Cloud 연결 클러스터에 Google Cloud 서비스를 배포하면 Distributed Cloud 연결에서 자체 서명 인증서를 발급하고 이를 사용하여 해당 서비스의 네트워크 트래픽을 암호화합니다. 이 인증서를 가져와서 비즈니스 환경에서 신뢰하도록 구성하는 것이 좋습니다.
PEM 인코딩 형식으로 이 인증서를 가져오려면 다음 명령어를 사용하세요.
kubectl get secret -n cert-manager-cluster-resources web-ca-cert -o jsonpath="{.data.ca\.crt}" | base64 -d
Distributed Cloud connected는 클러스터 전체에 걸쳐 여러 신뢰 번들을 생성합니다. 이러한 신뢰 번들은 클러스터의 모든 네임스페이스에 ConfigMap으로 저장됩니다. 각 계층은 다음과 같습니다.
trust-store-internal-only: Distributed Cloud connected의 내부 서비스용 인증 기관 (CA)이 포함되어 있습니다.trust-store-root-ext:trust-store-root-ext의 모든 CA와 타겟Google Cloud 서비스의 자체 서명 인증서에 서명한 CA가 포함됩니다. 포드가 대상 Google Cloud 서비스에 액세스해야 하는 경우 포드에 이 트러스트 번들을 마운트합니다.trust-store-user-ext:trust-store-root-ext의 모든 CA와 수동으로 추가한 CA를 포함합니다. 포드가 타겟 Google Cloud 서비스와 수동으로 추가한 CA에서 서명한 인증서를 사용하는 내부 리소스에 모두 액세스해야 하는 경우 포드에 이 번들을 마운트합니다.
다음 명령어를 사용하여 타겟 ConfigMap을 확인합니다.
kubectl -n default get configmap trust-store-user-root-ext -o yaml
다음 예시 출력은 일반적인 trust-store-user-root-ext ConfigMap 리소스를 보여줍니다.
apiVersion: v1
binaryData:
ca.jks: WW91IGFyZSBhd2Vzb21lIQo=
data:
ca.crt: |-
-----BEGIN CERTIFICATE-----
WW91IGFyZSBncmVhdCEK
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
WW91IGFyZSBmYW50YXN0aWMhCg==
-----END CERTIFICATE-----
kind: ConfigMap
metadata:
labels:
trust.cert-manager.io/bundle: trust-store-user-root-ext
name: trust-store-user-root-ext
namespace: default
자체 인증서를 신뢰하도록 배포된 Google Cloud 서비스 구성
Distributed Cloud 연결 클러스터에서 TLS 보안 비밀을 만들고 cert-manager-cluster-resources 네임스페이스에서 security.private.gdc.goog/bundles=trust-store-user-root-ext 주석으로 주석을 달 수 있습니다. 이렇게 하면 배포된 Google Cloud서비스가 내부 서드 파티 서비스를 신뢰하여 서비스 간 데이터 교환을 용이하게 할 수 있습니다.
이 보안 비밀을 클러스터에 적용하면 배포된 Google Cloud 서비스는 보안 비밀에서 참조된 ca.crt 파일에 저장된 CA 인증서를 신뢰합니다. 예를 들면 다음과 같습니다.
apiVersion: v1
data:
ca.crt: base64EncodedCaCert
tls.crt: base64EncodedCert
tls.key: base64EncodedKey
kind: Secret
metadata:
annotations:
security.private.gdc.goog/bundles: trust-store-user-root-ext
name: my-corporate-cert
namespace: cert-manager-cluster-resources
type: kubernetes.io/tls
인증 공급자 구성
배포된Google Cloud 서비스의 사용자 인터페이스를 통해 로그온할 수 있도록 인증 제공업체를 구성할 수 있습니다. 다음 예는 OpenID Connect 공급자의 구성을 보여줍니다.
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: "google-oidc"
oidc:
clientID: "my-supersecret-client-id.apps.googleusercontent.com"
clientSecret: "my-supersecret-secret"
issuerURI: "https://accounts.google.com"
scopes: "email"
userClaim: "email"
name: "default"
자세한 내용은 서드 파티 ID를 사용한 인증 정보를 참고하세요.
배포된 Google Cloud 서비스 사용
비즈니스 요구사항을 충족하도록 구성하는 방법에 관한 자세한 내용은 배포된 Google Cloud 서비스의 문서를 참고하세요.
배포된 Google Cloud 서비스 삭제
배포된 Google Cloud 서비스를 Distributed Cloud 연결 클러스터에서 삭제하려면 해당 서비스의 문서에 나온 단계를 따르세요. 이 페이지에 설명된 선택적 배포 후 단계를 완료한 경우 다음도 실행하세요.
- 내부 DNS에서 서비스의 하위 도메인으로의 DNS 전달을 사용 중지합니다.
- 신뢰가 설정된 서비스의 자체 서명 인증서에 대한 신뢰를 사용 중지합니다.