Я сгенерировал Java-клиент из https://github.com/helm/helm/blob/master/_proto/hapi/services/tiller.proto
, и я могу локально разговаривать с тиллером внутри кластера с помощью созданного клиента:
ManagedChannel channel = NettyChannelBuilder
.forAddress("tiller-deploy.kube-system.svc.cluster.local", 44134)
.negotiationType(NegotiationType.PLAINTEXT).build();
ReleaseServiceGrpc.ReleaseServiceBlockingStub blockingStub =
ReleaseServiceGrpc.newBlockingStub(channel).withCallCredentials(new CallCredentials() {
@Override
public void applyRequestMetadata(RequestInfo requestInfo, Executor executor, MetadataApplier metadataApplier) {
Metadata metadata = new Metadata();
metadata.put(Metadata.Key.of("x-helm-api-client", Metadata.ASCII_STRING_MARSHALLER), "v2.13.1");
metadataApplier.apply(metadata);
}
@Override
public void thisUsesUnstableApi() {
}
});
Tiller.GetHistoryResponse history = blockingStub.getHistory(Tiller.GetHistoryRequest.newBuilder()
.setName(name).setMax(10).build());
Но если я пытаюсьчтобы подключиться к экземпляру tiller внутри другого кластера, я должен как-то сделать переадресацию / туннель порта.
С официальным клиентом Java kubernetes я пытался использовать для этого метод portForward:
ApiClient client = createClient();
PortForward f = new PortForward(client);
PortForward.PortForwardResult forward = f.forward(tillerPod, Collections.singletonList(44134));
InputStream os = forward.getOutboundStream(44134);
InputStream is = forward.getInputStream(44134);
Но из этого API я получаю только потоки.С другой стороны, моему клиенту Tiller Protobuf / Grpc нужен Netty Channel, который можно создать только путем предоставления имени хоста и порта.
Я действительно не знаю, как соединить эти два конца вместе.Я знаю, что есть также клиент K8S от fabric8 и https://github.com/microbean/microbean-helm, который использует API fabric8 и выполняет более или менее точно то, что мне нужно, но, поскольку я уже реализовал довольно много вещей, используя официальный API, мой вопрос:Есть ли простой способ решить вышеупомянутую проблему с помощью официального API?