Kubernetes-客户端从客户端到服务或 Pod 的 Rest 调用

问题描述 投票:0回答:2

我有一个 Kubernetes 集群,我使用 .NET 的 kubernetes-client 库来管理配置、存储、服务和状态集的配置。配置工作正常,必要的资源已启动并正在运行。

通常,我还会配置一些入口,因为需要进行一些网络调用才能创建一些连接器,例如 debezium 连接器:

curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" <domain or ip>:8083/connectors/ --data "@connectors/source.json"

通过 kubernetes 客户端以编程方式调用类似的内容

http://<servicename>.<namespace>.svc.cluster.local:<port>/connectors/

是否可以从集群内部调用服务,因为我已经在使用 kubernetes 客户端,而不使用任何入口和公共调用?

kubernetes service client cluster-computing call
2个回答
0
投票

我不确定我是否完全理解您的用例。示例将有助于理解

what
调用
what

如果您的意思是某些

pod
在集群内调用 Kubernetes
service
,是的,如果它有
clusterIP
,您可以使用其名称访问 Kubernetes 服务,感谢 集群网络

例如(

k=kubectl
)

k get svc
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
dind            ClusterIP      10.43.150.27    <none>         2375/TCP         89d

k get pod
NAME                              READY   STATUS      RESTARTS   AGE
jenkins-0                         2/2     Running     7          7d17h

如果您想从

dind
pod(其容器之一)访问服务
jenkins-0
,请在其中运行 shell 并按名称访问服务:

k exec -it jenkins-0 bash
jenkins@jenkins-0:/$ curl http://dind:2375/version
{"Platform":{"Name":"Docker Engine - Community"}
...

我还写了一篇关于 Kubernetes Networking 的文章,您可能会觉得有用。


0
投票

我能够通过以下方法使用 Kubernetes .NET SDK 从我的应用程序调用集群的 Pod:

private static async Task ExecInPod(IKubernetes client, string podname, string space, string[] command, string container)
{
    var webSocket = await client.WebSocketNamespacedPodExecAsync(podname, space, command, container, true, true, true, true).ConfigureAwait(true);

    var buffer = new byte[1024 * 4];
    var receiveResult = await webSocket.ReceiveAsync(
    new ArraySegment<byte>(buffer), CancellationToken.None);

    while (!receiveResult.CloseStatus.HasValue)
    {
        await webSocket.SendAsync(
        new ArraySegment<byte>(buffer, 0, receiveResult.Count),
        receiveResult.MessageType,
        receiveResult.EndOfMessage,
        CancellationToken.None);

        receiveResult = await webSocket.ReceiveAsync(
            new ArraySegment<byte>(buffer), CancellationToken.None);

    }

    await webSocket.CloseAsync(
        receiveResult.CloseStatus.Value,
        receiveResult.CloseStatusDescription,
        CancellationToken.None);
}
© www.soinside.com 2019 - 2024. All rights reserved.