4.2.4. 가상 클러스터 구성
VirtualKafkaCluster 리소스는 네트워크를 통해 클라이언트에 액세스할 수 있는 논리적 Kafka 클러스터를 정의합니다.
가상 클러스터는 동일한 네임스페이스에 있어야 하는 다음 리소스를 참조합니다.
-
프록시가 포함된
KafkaProxy리소스입니다. -
가상 클러스터를 Kafka 클라이언트에 노출하고 수신(예: TLS 인증서 및 기타 매개변수)에 가상 클러스터별 구성을 제공하는 하나 이상의
KafkaProxyIngress리소스입니다. -
백엔드 Kafka 클러스터를 정의하는
KafkaService리소스입니다. -
클라이언트와 백엔드 Kafka 클러스터 간에 전달되는 Kafka 프로토콜 트래픽에 필터를 적용하는 0개 이상의
KafkaProtocolFilter리소스입니다.
이 예에서는 동일한 OpenShift 클러스터에서 실행되는 Kafka 클라이언트에 노출되는 VirtualKafkaCluster 를 보여줍니다. 전송 프로토콜로 일반 TCP(TLS와 반대)를 사용합니다.
단일 clusterIP 인그레스가 있는 VirtualKafkaCluster 구성의 예
kind: VirtualKafkaCluster
apiVersion: kroxylicious.io/v1alpha1
metadata:
name: my-cluster
namespace: my-proxy
spec:
proxyRef:
name: simple
targetKafkaServiceRef:
name: my-cluster
ingresses:
- ingressRef:
name: cluster-ip
이 예에서는 TLS를 사용하여 및 클러스터 외부에서 실행되는 Kafka 클라이언트에 노출되는 VirtualKafkaCluster 를 보여줍니다. TLS가 사용되므로 Ingress 구성은 TLS 서버 인증서를 참조해야 합니다.
TLS를 사용하는 두 개의 수신이 있는 VirtualKafkaCluster 구성의 예
kind: VirtualKafkaCluster
apiVersion: kroxylicious.io/v1alpha1
metadata:
name: my-cluster
namespace: my-proxy
spec:
proxyRef:
name: simple
targetKafkaServiceRef:
name: my-cluster
ingresses:
- ingressRef:
name: cluster-ip
certificateRef:
name: 'cluster-ip-server-cert'
kind: Secret
- ingressRef:
name: load-balancer
certificateRef:
name: 'external-server-cert'
kind: Secret
4.2.4.1. clusterIP 수신 유형에 대한 TLS 인증서 생성 링크 복사링크가 클립보드에 복사되었습니다!
TLS 프로토콜과 함께 clusterIP 수신 유형을 사용하는 경우 통신을 보호하는 데 적합한 TLS 인증서를 제공해야 합니다.
기본 단계는 다음과 같습니다.
- 인그레스로 가상 클러스터에 할당된 서비스 이름을 처리하는 TLS 서버 인증서를 생성합니다.
-
kubernetes.io/tls유형의 OpenShift시크릿을 사용하여 가상 클러스터에 인증서를 제공합니다.
인증서를 생성하는 정확한 절차는 조직에서 사용하는 툴링 및 프로세스에 따라 다릅니다.
인증서는 다음 기준을 충족해야 합니다.
- 이 인증서는 가상 클러스터에 연결하는 클러스터의 애플리케이션에서 신뢰하는 CA에서 서명해야 합니다.
- 인증서 형식은 PKCS#8로 인코딩된 PEM(Privacy Enhanced mail)이어야 합니다. 암호로 보호해서는 안 됩니다.
인증서는 SAN(Subject Alternate Names)을 사용하여 모든 서비스 이름을 나열하거나 모두를 포함하는 와일드카드 TLS 인증서를 사용해야 합니다. 노드 ID(0-2)를 사용하는
my-cluster의 가상 클러스터 이름,cluster-ip의 수신 이름 및 Kafka 클러스터라고 가정하면 인증서에 다음 SAN을 나열해야 합니다.my-cluster-cluster-ip-bootstrap.<namespace>.svc.cluster.local my-cluster-cluster-ip-0.<namespace>.svc.cluster.local my-cluster-cluster-ip-1.<namespace>.svc.cluster.local my-cluster-cluster-ip-2.<namespace>.svc.cluster.local
다음 명령을 사용하여 인증서의 보안을 생성합니다.
oc create secret tls <secret-name> --namespace <namespace> --cert=<path/to/cert/file> --key=<path/to/key/file>
< secret-name >은 생성할 시크릿의 이름입니다. < namespace >는 프록시를 배포할 네임스페이스의 이름이며 < path/to/cert/file > 및 < path/to/key/file >은 인증서 및 키 파일의 경로입니다.