Search in sources :

Example 36 with GenericKafkaListenerConfigurationBroker

use of io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker in project strimzi-kafka-operator by strimzi.

the class KafkaClusterTest method testExternalIngressMissingConfiguration.

@ParallelTest
public void testExternalIngressMissingConfiguration() {
    GenericKafkaListenerConfigurationBroker broker0 = new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(0).build();
    Kafka kafkaAssembly = new KafkaBuilder(ResourceUtils.createKafka(namespace, cluster, replicas, image, healthDelay, healthTimeout, jmxMetricsConfig, configuration, emptyMap())).editSpec().editKafka().withListeners(new GenericKafkaListenerBuilder().withName("external").withPort(9094).withType(KafkaListenerType.INGRESS).withTls(true).withNewConfiguration().withIngressClass("nginx-internal").withNewBootstrap().withHost("my-kafka-bootstrap.com").withAnnotations(Collections.singletonMap("dns-annotation", "my-kafka-bootstrap.com")).endBootstrap().withBrokers(broker0).endConfiguration().build()).endKafka().endSpec().build();
    try {
        KafkaCluster kc = KafkaCluster.fromCrd(Reconciliation.DUMMY_RECONCILIATION, kafkaAssembly, VERSIONS);
        fail("Expected exception was not thrown");
    } catch (InvalidResourceException e) {
    // pass
    }
}
Also used : GenericKafkaListenerConfigurationBrokerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBrokerBuilder) GenericKafkaListenerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder) Kafka(io.strimzi.api.kafka.model.Kafka) GenericKafkaListenerConfigurationBroker(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Example 37 with GenericKafkaListenerConfigurationBroker

use of io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker in project strimzi-kafka-operator by strimzi.

the class ListenersValidatorTest method testIngressListenerHostNames.

@ParallelTest
public void testIngressListenerHostNames() {
    GenericKafkaListener listener = new GenericKafkaListenerBuilder().withName("ingress").withPort(9092).withType(KafkaListenerType.INGRESS).withTls(true).build();
    assertThat(ListenersValidator.validateAndGetErrorMessages(2, asList(listener)), containsInAnyOrder("listener ingress is missing a configuration with host names which is required for Ingress based listeners"));
    listener.setConfiguration(new GenericKafkaListenerConfigurationBuilder().withBrokers((List<GenericKafkaListenerConfigurationBroker>) null).build());
    assertThat(ListenersValidator.validateAndGetErrorMessages(2, asList(listener)), containsInAnyOrder("listener ingress is missing a bootstrap host name which is required for Ingress based listeners", "listener ingress is missing a broker configuration with host names which is required for Ingress based listeners"));
    listener.setConfiguration(new GenericKafkaListenerConfigurationBuilder().withBootstrap(new GenericKafkaListenerConfigurationBootstrapBuilder().build()).withBrokers(new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(0).build(), new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(1).build()).build());
    assertThat(ListenersValidator.validateAndGetErrorMessages(2, asList(listener)), containsInAnyOrder("listener ingress is missing a bootstrap host name which is required for Ingress based listeners", "listener ingress is missing a broker host name for broker with ID 0 which is required for Ingress based listeners", "listener ingress is missing a broker host name for broker with ID 1 which is required for Ingress based listeners"));
    listener.setConfiguration(new GenericKafkaListenerConfigurationBuilder().withBootstrap(new GenericKafkaListenerConfigurationBootstrapBuilder().withHost("bootstrap-host").build()).withBrokers(new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(1).withHost("host-1").build()).build());
    assertThat(ListenersValidator.validateAndGetErrorMessages(2, asList(listener)), containsInAnyOrder("listener ingress is missing a broker host name for broker with ID 0 which is required for Ingress based listeners"));
    listener.setConfiguration(new GenericKafkaListenerConfigurationBuilder().withBootstrap(new GenericKafkaListenerConfigurationBootstrapBuilder().withHost("bootstrap-host").build()).withBrokers(new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(0).withHost("host-0").build(), new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(1).withHost("host-1").build()).build());
    assertThat(ListenersValidator.validateAndGetErrorMessages(2, asList(listener)), hasSize(0));
}
Also used : GenericKafkaListenerConfigurationBootstrapBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBootstrapBuilder) GenericKafkaListener(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListener) GenericKafkaListenerConfigurationBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBuilder) GenericKafkaListenerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder) GenericKafkaListenerConfigurationBrokerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBrokerBuilder) GenericKafkaListenerConfigurationBroker(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Example 38 with GenericKafkaListenerConfigurationBroker

use of io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker in project strimzi-kafka-operator by strimzi.

the class ListenersST method testAdvertisedHostNamesAppearsInBrokerCerts.

@Tag(NODEPORT_SUPPORTED)
@ParallelNamespaceTest
void testAdvertisedHostNamesAppearsInBrokerCerts(ExtensionContext extensionContext) throws CertificateException {
    final String clusterName = mapWithClusterNames.get(extensionContext.getDisplayName());
    final String namespaceName = StUtils.getNamespaceBasedOnRbac(INFRA_NAMESPACE, extensionContext);
    final String advertHostInternal0 = "kafka-test.internal.0.net";
    final String advertHostInternal1 = "kafka-test.internal.1.net";
    final String advertHostInternal2 = "kafka-test.internal.2.net";
    List<String> advertHostInternalList = asList(advertHostInternal0, advertHostInternal1, advertHostInternal2);
    final int advertPortInternalListener = 9999;
    final String advertHostExternal0 = "kafka-test.external.0.net";
    final String advertHostExternal1 = "kafka-test.external.1.net";
    final String advertHostExternal2 = "kafka-test.external.2.net";
    List<String> advertHostExternalList = asList(advertHostExternal0, advertHostExternal1, advertHostExternal2);
    final int advertPortExternalListener = 9888;
    GenericKafkaListenerConfigurationBroker brokerInternal0 = new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(0).withAdvertisedHost(advertHostInternal0).withAdvertisedPort(advertPortInternalListener).build();
    GenericKafkaListenerConfigurationBroker brokerInternal1 = new GenericKafkaListenerConfigurationBrokerBuilder(brokerInternal0).withBroker(1).withAdvertisedHost(advertHostInternal1).build();
    GenericKafkaListenerConfigurationBroker brokerInternal2 = new GenericKafkaListenerConfigurationBrokerBuilder(brokerInternal0).withBroker(2).withAdvertisedHost(advertHostInternal2).build();
    GenericKafkaListenerConfigurationBroker brokerExternal0 = new GenericKafkaListenerConfigurationBrokerBuilder().withBroker(0).withAdvertisedHost(advertHostExternal0).withAdvertisedPort(advertPortExternalListener).build();
    GenericKafkaListenerConfigurationBroker brokerExternal1 = new GenericKafkaListenerConfigurationBrokerBuilder(brokerExternal0).withBroker(1).withAdvertisedHost(advertHostExternal1).build();
    GenericKafkaListenerConfigurationBroker brokerExternal2 = new GenericKafkaListenerConfigurationBrokerBuilder(brokerExternal0).withBroker(2).withAdvertisedHost(advertHostExternal2).build();
    resourceManager.createResource(extensionContext, KafkaTemplates.kafkaEphemeral(clusterName, 3, 3).editSpec().editKafka().withListeners(asList(new GenericKafkaListenerBuilder().withName(Constants.TLS_LISTENER_DEFAULT_NAME).withPort(9098).withType(KafkaListenerType.INTERNAL).withTls(true).withNewConfiguration().withBrokers(asList(brokerInternal0, brokerInternal1, brokerInternal2)).endConfiguration().build(), new GenericKafkaListenerBuilder().withName(Constants.EXTERNAL_LISTENER_DEFAULT_NAME).withPort(9099).withType(KafkaListenerType.NODEPORT).withTls(true).withNewConfiguration().withBrokers(asList(brokerExternal0, brokerExternal1, brokerExternal2)).endConfiguration().build())).endKafka().endSpec().build());
    Map<String, String> secretData = kubeClient().getSecret(namespaceName, KafkaResources.brokersServiceName(clusterName)).getData();
    List<String> kafkaPods = kubeClient().listPodNamesInSpecificNamespace(namespaceName, Labels.STRIMZI_KIND_LABEL, Kafka.RESOURCE_KIND).stream().filter(podName -> podName.contains("kafka")).collect(Collectors.toList());
    int index = 0;
    for (String kafkaBroker : kafkaPods) {
        String cert = secretData.get(kafkaBroker + ".crt");
        LOGGER.info("Encoding {}.crt", kafkaBroker);
        ByteArrayInputStream publicCert = new ByteArrayInputStream(Base64.getDecoder().decode(cert.getBytes()));
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        Certificate certificate = certificateFactory.generateCertificate(publicCert);
        assertThat(certificate.toString(), containsString(advertHostInternalList.get(index)));
        assertThat(certificate.toString(), containsString(advertHostExternalList.get(index++)));
    }
}
Also used : ContainerEnvVarBuilder(io.strimzi.api.kafka.model.ContainerEnvVarBuilder) CoreMatchers.is(org.hamcrest.CoreMatchers.is) LabelSelector(io.fabric8.kubernetes.api.model.LabelSelector) CertificateFactory(java.security.cert.CertificateFactory) KafkaResource(io.strimzi.systemtest.resources.crd.KafkaResource) GenericKafkaListenerConfigurationBrokerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBrokerBuilder) KafkaTopicUtils(io.strimzi.systemtest.utils.kafkaUtils.KafkaTopicUtils) INFRA_NAMESPACE(io.strimzi.systemtest.Constants.INFRA_NAMESPACE) KafkaUser(io.strimzi.api.kafka.model.KafkaUser) SecurityProtocol(org.apache.kafka.common.security.auth.SecurityProtocol) KafkaUtils.getKafkaSecretCertificates(io.strimzi.systemtest.utils.kafkaUtils.KafkaUtils.getKafkaSecretCertificates) KafkaListenerAuthenticationTls(io.strimzi.api.kafka.model.listener.KafkaListenerAuthenticationTls) Matcher(java.util.regex.Matcher) SystemTestCertAndKey(io.strimzi.systemtest.security.SystemTestCertAndKey) ByteArrayInputStream(java.io.ByteArrayInputStream) KafkaResources(io.strimzi.api.kafka.model.KafkaResources) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Tag(org.junit.jupiter.api.Tag) ServiceUtils(io.strimzi.systemtest.utils.kubeUtils.objects.ServiceUtils) StUtils(io.strimzi.systemtest.utils.StUtils) RollingUpdateUtils(io.strimzi.systemtest.utils.RollingUpdateUtils) ACCEPTANCE(io.strimzi.systemtest.Constants.ACCEPTANCE) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) ListenerAddress(io.strimzi.api.kafka.model.status.ListenerAddress) INTERNAL_CLIENTS_USED(io.strimzi.systemtest.Constants.INTERNAL_CLIENTS_USED) GenericKafkaListenerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder) SystemTestCertManager.generateRootCaCertAndKey(io.strimzi.systemtest.security.SystemTestCertManager.generateRootCaCertAndKey) CertAndKeyFiles(io.strimzi.systemtest.security.CertAndKeyFiles) Collectors(java.util.stream.Collectors) ClientUtils(io.strimzi.systemtest.utils.ClientUtils) StandardCharsets(java.nio.charset.StandardCharsets) ListenerStatus(io.strimzi.api.kafka.model.status.ListenerStatus) Base64(java.util.Base64) List(java.util.List) Labels(io.strimzi.operator.common.model.Labels) Logger(org.apache.logging.log4j.Logger) Certificate(java.security.cert.Certificate) KafkaUtils.getKafkaStatusCertificates(io.strimzi.systemtest.utils.kafkaUtils.KafkaUtils.getKafkaStatusCertificates) KafkaTopicTemplates(io.strimzi.systemtest.templates.crd.KafkaTopicTemplates) Secret(io.fabric8.kubernetes.api.model.Secret) Pattern(java.util.regex.Pattern) AbstractST(io.strimzi.systemtest.AbstractST) KafkaClientsTemplates(io.strimzi.systemtest.templates.crd.KafkaClientsTemplates) LOADBALANCER_SUPPORTED(io.strimzi.systemtest.Constants.LOADBALANCER_SUPPORTED) ParallelSuite(io.strimzi.systemtest.annotations.ParallelSuite) OpenShiftOnly(io.strimzi.systemtest.annotations.OpenShiftOnly) ExternalKafkaClient(io.strimzi.systemtest.kafkaclients.externalClients.ExternalKafkaClient) ExtensionContext(org.junit.jupiter.api.extension.ExtensionContext) SecretUtils(io.strimzi.systemtest.utils.kubeUtils.objects.SecretUtils) GenericKafkaListenerConfigurationBroker(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker) PodUtils(io.strimzi.systemtest.utils.kubeUtils.objects.PodUtils) SystemTestCertManager.generateIntermediateCaCertAndKey(io.strimzi.systemtest.security.SystemTestCertManager.generateIntermediateCaCertAndKey) SystemTestCertManager.generateEndEntityCertAndKey(io.strimzi.systemtest.security.SystemTestCertManager.generateEndEntityCertAndKey) Service(io.fabric8.kubernetes.api.model.Service) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) NODEPORT_SUPPORTED(io.strimzi.systemtest.Constants.NODEPORT_SUPPORTED) KafkaTemplates(io.strimzi.systemtest.templates.crd.KafkaTemplates) KafkaUtils(io.strimzi.systemtest.utils.kafkaUtils.KafkaUtils) InternalKafkaClient(io.strimzi.systemtest.kafkaclients.clients.InternalKafkaClient) Constants(io.strimzi.systemtest.Constants) ParallelNamespaceTest(io.strimzi.systemtest.annotations.ParallelNamespaceTest) EXTERNAL_CLIENTS_USED(io.strimzi.systemtest.Constants.EXTERNAL_CLIENTS_USED) CertificateException(java.security.cert.CertificateException) KubeClusterResource.kubeClient(io.strimzi.test.k8s.KubeClusterResource.kubeClient) JsonArray(io.vertx.core.json.JsonArray) AfterEach(org.junit.jupiter.api.AfterEach) KafkaListenerType(io.strimzi.api.kafka.model.listener.arraylistener.KafkaListenerType) KafkaUserTemplates(io.strimzi.systemtest.templates.crd.KafkaUserTemplates) KafkaUserUtils(io.strimzi.systemtest.utils.kafkaUtils.KafkaUserUtils) SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) Kafka(io.strimzi.api.kafka.model.Kafka) Comparator(java.util.Comparator) LogManager(org.apache.logging.log4j.LogManager) Collections(java.util.Collections) REGRESSION(io.strimzi.systemtest.Constants.REGRESSION) SystemTestCertManager.exportToPemFiles(io.strimzi.systemtest.security.SystemTestCertManager.exportToPemFiles) GenericKafkaListenerConfigurationBrokerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBrokerBuilder) GenericKafkaListenerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder) ByteArrayInputStream(java.io.ByteArrayInputStream) GenericKafkaListenerConfigurationBroker(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) CertificateFactory(java.security.cert.CertificateFactory) Certificate(java.security.cert.Certificate) ParallelNamespaceTest(io.strimzi.systemtest.annotations.ParallelNamespaceTest) Tag(org.junit.jupiter.api.Tag)

Aggregations

GenericKafkaListenerConfigurationBroker (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker)38 GenericKafkaListenerBuilder (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder)34 Kafka (io.strimzi.api.kafka.model.Kafka)30 ParallelTest (io.strimzi.test.annotations.ParallelTest)30 KafkaBuilder (io.strimzi.api.kafka.model.KafkaBuilder)28 GenericKafkaListenerConfigurationBrokerBuilder (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBrokerBuilder)20 TopologySpreadConstraint (io.fabric8.kubernetes.api.model.TopologySpreadConstraint)10 GenericKafkaListenerConfigurationBootstrapBuilder (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBootstrapBuilder)7 Service (io.fabric8.kubernetes.api.model.Service)6 GenericKafkaListener (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListener)6 GenericKafkaListenerConfigurationBootstrap (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBootstrap)5 ContainerPort (io.fabric8.kubernetes.api.model.ContainerPort)4 StatefulSet (io.fabric8.kubernetes.api.model.apps.StatefulSet)4 Ingress (io.fabric8.kubernetes.api.model.networking.v1.Ingress)4 Route (io.fabric8.openshift.api.model.Route)4 ListenerAddress (io.strimzi.api.kafka.model.status.ListenerAddress)4 Reconciliation (io.strimzi.operator.common.Reconciliation)4 Labels (io.strimzi.operator.common.model.Labels)4 KafkaListenerAuthenticationTls (io.strimzi.api.kafka.model.listener.KafkaListenerAuthenticationTls)3 GenericKafkaListenerConfiguration (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfiguration)3