首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Confluent Kafka Dotnet Kerberos支持Dockerfile (没有提供SASL机制GSSAPI)

Confluent Kafka Dotnet Kerberos支持Dockerfile (没有提供SASL机制GSSAPI)
EN

Stack Overflow用户
提问于 2020-07-21 15:22:47
回答 1查看 1.5K关注 0票数 0

我正在尝试创建一个dockerfile,这是一个使用confluent-kafka-dotnet的kafka客户端。它必须使用Kerberos keytab进行连接,因此我阅读了this Github wiki

这是我的dockerfile:

代码语言:javascript
复制
# ---- dotnet build stage ----
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build

ARG BUILDCONFIG=RELEASE
ARG VERSION=1.0.0

# Installing dependencies for li
RUN apt-get update && apt-get install libsasl2-modules-gssapi-mit libsasl2-dev unzip build-essential -y

COPY ./lib/ /
RUN unzip librdkafka-1.4.4.zip && \
    cd librdkafka-1.4.4 && \
    ./configure && \
    make && \
    make install

WORKDIR /build/

COPY ./DashboardServer/DashboardServer.csproj ./DashboardServer.csproj
RUN dotnet nuget add source https://ci.appveyor.com/nuget/docker-dotnet-hojfmn6hoed7 && \
    dotnet restore ./DashboardServer.csproj

COPY ./DashboardServer ./

RUN dotnet build && dotnet publish ./DashboardServer.csproj -c ${BUILDCONFIG} -o out /p:Version=${VERSION}

# ---- final stage ----

FROM ubuntu:20.04

LABEL Maintainer=""

ENV PROGRAM_HOME=/opt/DashboardServer
ENV ASPNETCORE_ENVIRONMENT=Production

RUN apt-get update && \
    apt-get install -y wget && wget https://packages.microsoft.com/config/ubuntu/19.10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \
    dpkg --purge packages-microsoft-prod && dpkg -i packages-microsoft-prod.deb && \
    apt-get update && \
    apt-get install aspnetcore-runtime-3.1 curl -y

RUN export DEBIAN_FRONTEND=noninteractive && apt-get install libsasl2-modules-gssapi-mit libsasl2-dev -y krb5-user

# Kafka SASL directory (keytab is placed here)
RUN mkdir /sasl/

ENV KEYTAB_LOCATION=/sasl/dashboards.service.keytab

COPY --from=build /build/out ${PROGRAM_HOME}

# Copy necessary scripts + configuration
COPY scripts /tmp/
RUN chmod +x /tmp/*.sh && \
    mv /tmp/* /usr/bin && \
    rm -rf /tmp/*

CMD [ "docker-entrypoint.sh" ]

我的C#消费者配置代码如下:

代码语言:javascript
复制
var consumerConfig = new ConsumerConfig {
                GroupId = "command-server" + KafkaHelpers.Servername,
                BootstrapServers = KafkaHelpers.BootstrapServers,
                AutoOffsetReset = AutoOffsetReset.Latest,
                SecurityProtocol = SecurityProtocol.SaslPlaintext,
                SaslKerberosServiceName = "kafka",
                SaslKerberosKeytab = Environment.GetEnvironmentVariable("KEYTAB_LOCATION"),
                SaslKerberosPrincipal = "dashboardserver/<<IPAddress>>"
            };

但是当我启动我的客户端时,我得到了以下异常

代码语言:javascript
复制
Unhandled exception. Unhandled exception. System.InvalidOperationException: No provider for SASL 
mechanism GSSAPI: recompile librdkafka with libsasl2 or openssl support. Current build options: PLAIN SASL_SCRAM OAUTHBEARER

有谁能帮我走出困境,或者给我指明正确的方向?我找到了this on GitHub,但我似乎不能让它工作。

我不知道如何一步一步地安装librdkafka。

EN

回答 1

Stack Overflow用户

发布于 2020-07-22 14:34:30

confluent-kafka-dotnet依赖于librdkafka.redist,默认情况下它从哪里加载librdkafka。librdkafka.redist中的构建缺乏对大多数平台的SASL/GSSAPI支持(由于libsasl2及其所有支持库的依赖问题),所以构建您自己的librdkafka版本的方法是正确的,但您需要告诉confluent-kafka-dotnet加载您的librdkafka构建而不是librdkafka.redist版本,您可以通过调用

代码语言:javascript
复制
Confluent.Kafka.Library.Load("/usr/local/lib/librdkafka.so");

在调用任何其他confluent-kafka-dotnet API之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63009427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档