navikt / kafka-adminrest

A REST interface for kafka topic creation/deletion with automatic handling of LDAP groups and access control lists
MIT License
3 stars 1 forks source link

Skript feiler når nye topics opprettes og gjør oppdatering av den nye ACL'en #1

Closed ctryti closed 6 years ago

ctryti commented 6 years ago

Har en Jenkins-pipeline som oppretter topics og legger til consumer og producer. Om det opprettes et helt nytt topic feiler jobben når den prøver å legge til en consumer/producer med <user> is NOT manager of <topic>. Rekjører jeg jobben funker det fint.

Første gang vi så feilen: https://logs.adeo.no/goto/84f1bcb76eac5cf6bb229536dc74cbdd Reproduksjon av feilen: https://logs.adeo.no/goto/910e24819676e8c8e42b0a43ac11162d

Tipper problemet enten er at koden som oppretter ACL'ene (eller baksystemer) gjør noe asynkront, eller at ldapgw/en-eller-annen-cache ikke har rukket å få med seg at gruppen er opprettet/oppdatert.

tronghn commented 6 years ago

APIet vi bruker mot LDAP/AD er synkront så vidt jeg forstår. I det du oppretter en ny topic så opprettes det i tillegg tre ulike grupper i AD: producer, consumer og manager.

Når du forsøker å legge inn en producer/consumer med et autentisert kall så sjekker vi om brukeren har tilgang til å endre på disse ACLene, i.e. om brukeren du autentiserer med er medlem av manager-gruppen i AD.

Feilen dere opplever, som jeg så vidt kan se fra loggene oppstår ved å legge inn medlemmer umiddelbart rett etter å ha opprettet gruppene, skyldes sannsynligvis at endringene i AD ikke propagert seg til alle instansene, så autoriasjonssjekken vår vil naturligvis returnere <user> is NOT manager of <topic> dersom vi treffer på en instans som ikke har fått med seg endringene. Akkurat det tror jeg er litt utenfor vår kontroll.

En løsning er å legge inn en delay mellom opprettelse av topic og innmelding av nye medlemmer - rundt 15 sekunder virker å fungere greit utifra mine egne tester (n=30).

ctryti commented 6 years ago

En liten sleep mellom kallene er en løsning ja, men er det egentlig lurt å dytte dette ansvaret over til konsumenter av api'et?

Kunne kanskje POST mot /topics også ta imot producers/consumers? Da kan kafka-adminrest ta seg av eventuelle sleeps som trengs.

Jeg legger ihvertfall inn en sleep på 15 sekunder i pipelinene nå, så får dere avgjøre om dette er noe dere gjør noe med eller ikke.

tronghn commented 6 years ago

Å få inn lister med producer/consumer under opprettelsen av topic er absolutt en mulighet. Skal høre med @ttnesby når han er tilbake neste uke.

ttnesby commented 6 years ago

I concur.

We need a new version of the API for easier kafka configuration in a pipeline. Would be nice with one simple request for a new topic with multiple lists (topic configuration, managers, producers and consumers), with idempotence flavour.

Simultaneously, focus on lifting the kafka confluent version from 4.0 to 4.1. The latter including KSQL.

Will discuss the matter with NAV kafka core group and report back.