CNI(Container Network Interface), 프록시 서버 및 TLS 인증서를 비롯한 주요 기능에 대한 글로벌 설정을 사용하여 Tanzu Kubernetes Grid 서비스를 사용자 지정할 수 있습니다. 글로벌 기능을 구현하는 것과 클러스터당 기능을 구현하는 것의 장단점 및 고려 사항을 알고 있어야 합니다.

TkgServiceConfiguration v1alpha2 규격

TkgServiceConfiguration 규격은 Tanzu Kubernetes Grid 서비스 인스턴스 구성을 위한 필드를 제공합니다.
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration-spec
spec:
  defaultCNI: string
  proxy:
    httpProxy: string
    httpsProxy: string
    noProxy: [string]
  trust:
    additionalTrustedCAs:
      - name: string
        data: string
  defaultNodeDrainTimeout: time
경고: Tanzu Kubernetes Grid 서비스 구성은 글로벌 작업입니다. TkgServiceConfiguration 규격을 변경하면 해당 서비스에서 프로비저닝된 모든 Tanzu Kubernetes 클러스터에 적용됩니다. 롤링 업데이트가 시작되면(수동으로 또는 업그레이드를 통해) 변경된 서비스 규격에 따라 클러스터가 업데이트됩니다.

주석이 추가된 TkgServiceConfiguration v1alpha2 규격

다음 YAML은 각 TkgServiceConfiguration 규격 매개 변수에 대해 구성 가능한 필드를 나열하고 설명합니다. 예제에 대해서는 Tanzu Kubernetes Grid 서비스 v1alpha1 API 구성 예시 항목을 참조하십시오.
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration-spec
spec:
  #defaultCNI is the default CNI for all Tanzu Kubernetes 
  #clusters to use unless overridden on a per-cluster basis 
  #supported values are antrea, calico, antrea-nsx-routed
  #defaults to antrea
  defaultCNI: string
  #proxy configures a proxy server to be used inside all 
  #clusters provisioned by this TKGS instance
  #if implemented all fields are required
  #if omitted no proxy is configured 
  proxy:
    #httpProxy is the proxy URI for HTTP connections 
    #to endpionts outside the clusters
    #takes the form http://<user>:<pwd>@<ip>:<port>
    httpProxy: string
    #httpsProxy is the proxy URI for HTTPS connections 
    #to endpoints outside the clusters
    #takes the frorm http://<user>:<pwd>@<ip>:<port>
    httpsProxy: string
    #noProxy is the list of destination domain names, domains, 
    #IP addresses, and other network CIDRs to exclude from proxying
    #must include Supervisor Cluster Pod, Egress, Ingress CIDRs
    noProxy: [string]
  #trust configures additional trusted certificates 
  #for the clusters provisioned by this TKGS instance
  #if omitted no additional certificate is configured
  trust: 
    #additionalTrustedCAs are additional trusted certificates 
    #can be additional CAs or end certificates
    additionalTrustedCAs:
      #name is the name of the additional trusted certificate
      #must match the name used in the filename
      - name: string
        #data holds the contents of the additional trusted cert 
        #PEM Public Certificate data encoded as a base64 string
        data: string
  #defaultNodeDrainTimeout is the total amount of time the
  #controller spends draining a node; default is undefined
  #which is the value of 0, meaning the node is drained 
  #without any time limitations; note that `nodeDrainTimeout` 
  #is different from `kubectl drain --timeout`
  defaultNodeDrainTimeout: time

프록시 서버 구성 요구 사항

구성된 경우 프록시 서버는 클러스터에서 아웃바운드 HTTP 및 HTTPS 트래픽에 사용됩니다. Tanzu Kubernetes 클러스터에 대한 프록시 서버를 구성하려면 다음 요구 사항에 유의하십시오.
  • 필수 proxy 매개 변수는 httpProxy, httpsProxy, noProxy입니다. proxy stanza를 추가하는 경우 세 개의 필드가 모두 필수입니다.
  • HTTP를 사용하여 프록시 서버에 연결할 수 있습니다. HTTPS 연결은 지원되지 않습니다.
  • 필요한 spec.proxy.noProxy 값은 워크로드 네트워크에서 가져옵니다. 네임스페이스 네트워크(이전의 포드 CIDR), 수신(이전의 수신 CIDR) 및 송신(이전의 송신 CIDR)를 noProxy 필드에 포함하여 프록시로 지정하면 안 됩니다. 아래의 예제 이미지를 참조하십시오.
  • 서비스 CIDR을 noProxy 필드에 포함할 필요가 없습니다. Tanzu Kubernetes 클러스터는 이 서브넷과 상호 작용하지 않습니다.
  • Tanzu Kubernetes 클러스터 규격의 network.services.cidrBlocksnetwork.pods.cidrBlocks 값을 noProxy 필드에 포함할 필요가 없습니다. 이러한 서브넷은 자동으로 프록시로 지정되지 않습니다.
  • localhost127.0.0.1noProxy 필드에 포함할 필요가 없습니다. 끝점은 자동으로 프록시로 지정되지 않습니다.

네임스페이스 네트워크, 수신 및 송신 필드가 강조 표시된 워크로드 네트워크 설정 창입니다.

POD CIDR, 수신 CIDR 및 송신 CIDR이 강조 표시된 워크로드 네트워크 설정 창입니다.

글로벌 또는 클러스터별 구성 옵션을 사용하는 경우

TkgServiceConfigurationTanzu Kubernetes Grid 서비스 인스턴스로 프로비저닝된 모든 Tanzu Kubernetes 클러스터에 영향을 미치는 글로벌 규격입니다.

TkgServiceConfiguration 규격을 편집하기 전에, 글로벌 구성 대신 사용 사례를 충족할 수 있는 클러스터별 대안을 알고 있어야 합니다.
표 1. 글로벌 및 클러스터별 구성 옵션
설정 글로벌 옵션 클러스터별 옵션
기본 CNI TkgServiceConfiguration 규격을 편집합니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API 구성 예시의 내용을 참조하십시오. 클러스터 규격에서 CNI를 지정합니다. 예를 들어 기본 CNI는 Antrea입니다. Calico를 사용하려면 클러스터 YAML에서 지정합니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 예 항목을 참조하십시오.
프록시 서버 TkgServiceConfiguration 규격을 편집합니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API 구성 예시의 내용을 참조하십시오. 클러스터 규격에 프록시 서버 구성 매개 변수를 포함합니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 예의 내용을 참조하십시오.
트러스트 인증서 TkgServiceConfiguration 규격을 편집합니다. 외부 컨테이너 레지스트리 구성과 인증서 기반 프록시 구성이라는 두 가지 사용 사례가 있습니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API 구성 예시 항목을 참조하십시오. 예, 클러스터별로 사용자 지정 인증서를 포함하거나 클러스터 규격에서 전체적으로 설정된 trust 설정을 재정의할 수 있습니다. Tanzu Kubernetes Grid 서비스 v1alpha1 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 예의 내용을 참조하십시오.
참고: TkgServiceConfiguration에 글로벌 프록시가 구성된 경우 이 프록시 정보는 클러스터의 초기 배포 후 클러스터 매니페스트로 전파됩니다. 글로벌 프록시 구성은 클러스터를 생성할 때 프록시 구성 필드가 없는 경우에만 클러스터 매니페스트에 추가됩니다. 다시 말해, 클러스터별 구성이 우선하며 글로벌 프록시 구성을 덮어씁니다. 자세한 내용은 Tanzu Kubernetes Grid 서비스 v1alpha1 API에 대한 구성 매개 변수의 내용을 참조하십시오.

TkgServiceConfiguration 규격을 편집하기 전에 글로벌 수준에서 설정을 적용하는 결과에 대해 알고 있어야 합니다.

필드 적용 추가/변경된 경우 기존 클러스터에 미치는 영향 클러스터 생성 시 클러스터별 재정의 클러스터 업데이트 시 클러스터별 재정의
defaultCNI 전체적으로 없음 예, 클러스터 생성 시 글로벌 설정을 재정의할 수 있습니다. 아니요, 기존 클러스터의 CNI를 변경할 수 없습니다. 클러스터 생성 시 전체적으로 설정된 기본 CNI를 사용한 경우에는 변경할 수 없습니다.
proxy 전체적으로 없음 예, 클러스터 생성 시 글로벌 설정을 재정의할 수 있습니다. 예, U2+를 사용하면 클러스터 업데이트 시 글로벌 설정을 재정의할 수 있습니다.
trust 전체적으로 없음 예, 클러스터 생성 시 글로벌 설정을 재정의할 수 있습니다. 예, U2+를 사용하면 클러스터 업데이트 시 글로벌 설정을 재정의할 수 있습니다.

글로벌 구성 변경을 기존 클러스터에 전파

TkgServiceConfiguration의 글로벌 수준에서 지정한 설정은 기존 클러스터에 자동으로 전파되지 않습니다. 예를 들어 TkgServiceConfiguration에서 proxy 또는 trust 설정을 변경하는 경우 이미 프로비저닝된 클러스터에는 이러한 변경 사항이 영향을 주지 않습니다.

기존 클러스터에 글로벌 변경 내용을 전파하려면 Tanzu Kubernetes 클러스터에 패치를 적용하여 TkgServiceConfiguration에 대한 변경 내용을 클러스터가 상속하도록 해야 합니다.

예:
kubectl patch tkc <CLUSTER_NAME> -n <NAMESPACE> --type merge -p "{\"spec\":{\"settings\":{\"network\":{\"proxy\": null}}}}"
kubectl patch tkc <CLUSTER_NAME> -n <NAMESPACE> --type merge -p "{\"spec\":{\"settings\":{\"network\":{\"trust\": null}}}}"