0

在我的应用程序端,我有一个名为 myfunction 的函数,通过这个函数,我们可以使用其端点和 OPAinput 作为函数参数调用 OPA,它通过“函数(上下文,数据)”部分中的“数据”返回响应。这就是我调用函数的方式。

myfunction('http://localhost:8181/v1/data/play/policy', OPAinput , {
                  onSuccess : function(context, data) { 
        var permit = data.result.permit;
                      Log.info('permit '+ permit);
                  Log.info("Successfully posted data.");

},  onFail : function(context) {
                      Log.info("Failed to post data");
             }
  });

当我通过在本地运行 OPA 和应用程序来测试这个功能时,它运行良好。但是现在我已经将 OPA 与应用程序一起部署为 GKE 上的 sidecar 容器,我尝试了同样的事情,但它不起作用。它说

“无法在 jdk.scripting.nashorn/jdk.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) 在 jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors 获得属性“许可” .typeError(ECMAErrors.java:213…………。”</p>

    This is the OPA logs
    
    2020-06-26 15:38:22.000 IST {"level":"info","msg":"Initializing server.","insecure_addr":"","diagnostic-addrs":[],"addrs":[":8181"]}
    2020-06-26 16:24:52.000 IST {"msg":"Received request.","req_path":"/v1/data/play/policy","req_id":1,"level":"info","req_method":"POST","client_addr":"127.0.0.1:39530"}
    2020-06-26 16:24:52.000 IST {"resp_status":200,"level":"info","req_method":"POST","req_id":1,"client_addr":"127.0.0.1:39530","req_path":"/v1/data/play/policy","resp_bytes":2,"msg":"Sent response.","resp_duration":9.564696}
    

    apiVersion: v1
    kind: Deployment
    metadata:
      name: rss-site
      namespace: myapp
    spec:
      replicas: 1
      minReadySeconds: 30
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      selector:
        matchLabels:
          deployment: myapp
          app: myapp
          pod: myapp
      template:
        metadata:
          labels:
            deployment: myapp
            app: myapp
            pod: myapp
        spec:
          containers:
            - name: opa
              image: openpolicyagent/opa:latest
              ports:
                - name: http
                  containerPort: 8181
              args:
                - "run"
                - "--ignore=.*"  # exclude hidden dirs created by Kubernetes
                - "--server"
                - "/policies"
              volumeMounts:
                - readOnly: true
                  mountPath: /policies
                  name: example-policy
            - name: myapp
              image: nickchase/myapp:v1
              ports:
                - containerPort: 9763
                  protocol: TCP
              volumeMounts:
                - name: identity-server-conf
                  mountPath: /home/myapp/myapp-config-volume/repository/conf/deployment.toml
                  subPath: deployment.toml
              serviceAccountName: "myappsvc-account"
            volumes:
              - name: myapp-server-conf
                configMap:
                  name: myapp-server-conf
              - name: example-policy
                configMap:
                  name: example-policy
Could you please help me to identify this issue :(
4

1 回答 1

1

当我通过在本地运行 OPA 和应用程序来测试这个功能时,它运行良好。但是现在我已经将 OPA 与应用程序一起部署为 GKE 上的 sidecar 容器,我尝试了同样的事情,但它不起作用。它说

如果它在本地工作而不是在 GKE 中工作,则意味着有所不同。由于它返回 HTTP 200 响应,因此 OPA 容器可能运行正常,但策略、输入或数据与您在本地运行的不同。

--set=decision_logs.console=true尝试通过OPA 参数启用控制台决策记录器。这将在 OPA 的日志输出中向您显示它收到的输入以及它发回的结果。这应该有助于指导调查。

我还会仔细检查所有策略和数据是否已以与本地相同的方式加载到 OPA 中。目录路径的差异可能会影响加载的任何*.json/*.yaml文件,并且如果您有任何丢失或其他不同*.rego的文件,它也可能会影响结果。

于 2020-06-26T21:11:06.547 回答