azure 与应用程序不同的机器上的DAPR Sidecar

pwuypxnk  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(88)

我正在用Dapr做一些测试,但这些测试不起作用,场景不是很常见(目前只是一些测试)。部署在Azure中的Web应用程序使用也位于Azure中的Dapr Sidecar,但它并不运行在同一个“网络”中。在这种情况下,sidecar是AKS中的部署/服务。在Dapr文档中,我没有看到应用程序和它的Sidecar通过互联网通信的任何障碍(是的,我知道这是一个奇怪的场景)。是这样吗?也就是说,在理论上这样做是不是没有障碍?
Sidecar的部署如下。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dapr-sidecar
spec:
  selector:
    matchLabels:
      app: dapr-sidecar
  replicas: 1
  template:
    metadata:
      labels:
        app: dapr-sidecar
    spec:
      containers:
        - name: daprd
          image: "daprio/daprd:latest"
          imagePullPolicy: Always
          command:
            - "./daprd"
          args:
            - "--app-id"
            - "daprtestbackend"
            - "--app-port"
            - "80"
            - "--dapr-grpc-port"
            - "50001"
            - "--dapr-http-port"
            - "8078"
            - "--components-path"
            - "/components"
            - "--log-level"
            - "debug"
          volumeMounts:
            - name: components-volume
              mountPath: /components
          ports:
            - containerPort: 50001
              name: grpc-port
            - containerPort: 8078
              name: http-port
      volumes:
        - name: components-volume
          configMap:
            name: dapr-components
---
apiVersion: v1
kind: Service
metadata:
  name: dapr-sidecar-service
spec:
  selector:
    app: dapr-sidecar
  ports:
    - name: grpc
      port: 50001
      targetPort: 50001
    - name: http
      port: 8078
      targetPort: 8078
  type: LoadBalancer

在Web应用程序方面,我基本上做了以下几点:

// Here I basically put the IP of the AKS Service (load balancer type) and the port that 
// I have configured there, I have tried with HTTP, gRPC etc...
const string httpEndPoint = "http://{SERVICE_SIDECAR}:{PORT}";
builder.Services.AddDaprClient(options =>
{
    options.UseHttpEndpoint(httpEndPoint);
});
...
...
// Dapr will send a serialized event object instead of a raw CloudEvent.
app.UseCloudEvents();

// required for Dapr's pub/sub routing.
app.MapSubscribeHandler();

// Dapr subscription in [Topic] routes topic requests to this path
app.MapPost("/jobs", [Topic("jobpubsub", "jobs")] (Job job) => {
    Console.WriteLine("Call to /jobs");
    /Register the job
    Console.WriteLine("Subscriber received : " + job);
    return Results.Ok(job);
});

...

我已经尝试过gRPC,HTTP,但没有办法得到消息....有什么建议吗?

ccrfmcuu

ccrfmcuu1#

这一点都不奇怪。我创建这个沙盒项目的原因与您在这里描述的相同:
https://github.com/dapr-sandbox/dapr-ambient
现在,这是一种简单的方法,将sidecar作为您的应用程序可以连接到的单独部署/deamonset运行。这里的想法是推动这个原型来支持多个应用程序连接到同一个环境,但这仍然不起作用,因为我们需要创建一个提案来定义我们如何实现这一点。
在您的部署定义中,我认为您缺少此参数:https://github.com/dapr-sandbox/dapr-ambient/blob/main/chart/dapr-ambient/templates/daemonset.yaml#L74

--dapr-listen-addresses=0.0.0.0

我们正在使用Dapr-Ambient。如果你想让Dapr-Ambient为你的用例工作,让我知道,因为有一个社区驱动的方法比维护你的内部解决方案要好得多。
希望这能帮上忙。干杯

相关问题