我已经从https://github.com/helm/helm/blob/master/_proto/hapi/services/tiller.proto生成了Java客户端
并且我能够与创建的客户端在集群内部本地与分till交谈:
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());
但是,如果我要连接到另一个群集中的分till实例,则必须以某种方式进行端口转发/隧道操作。
在正式的kubernetes Java客户端中,我尝试为此使用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我只能得到Streams。另一方面,我的Tiller Protobuf / Grpc客户端需要只能创建的Netty渠道 通过提供主机名和端口。
我真的不知道如何将这两个目的放在一起。我知道,还有fabric8和https://github.com/microbean/microbean-helm的K8S客户端 使用fabric8 API或多或少地完全满足了我的需要,但是由于我已经使用官方API实现了很多东西 我的问题是:有没有一种简便的方法可以通过官方API解决上述问题?