private IngressConfiguration getRpcRouteConfig(final List<GrpcUpstream> grpcUpStream, final Map<String, String> annotations) {
        final ConditionData conditionData = new ConditionData();
        conditionData.setParamName("grpc");
        conditionData.setParamType(ParamTypeEnum.URI.getName());
        conditionData.setOperator(OperatorEnum.PATH_PATTERN.getAlias());
        conditionData.setParamValue("/**");

        final SelectorData selectorData = SelectorData.builder()
                .name("grpc-selector")
                .sort(Integer.MAX_VALUE)
                .conditionList(Collections.singletonList(conditionData))
                .handle(GsonUtils.getInstance().toJson(grpcUpStream))
                .enabled(true)
                .id(IngressConstants.ID)
                .pluginName(PluginEnum.GRPC.getName())
                .pluginId(String.valueOf(PluginEnum.GRPC.getCode()))
                .logged(false)
                .continued(true)
                .matchMode(MatchModeEnum.AND.getCode())
                .type(SelectorTypeEnum.FULL_FLOW.getCode()).build();

        GrpcRuleHandle grpcRuleHandle = new GrpcRuleHandle();
        if (Objects.nonNull(annotations)) {
            grpcRuleHandle.setLoadBalance(annotations.getOrDefault(IngressConstants.LOADBALANCER_ANNOTATION_KEY, LoadBalanceEnum.RANDOM.getName()));
        }

        final RuleData ruleData = RuleData.builder()
                .selectorId(IngressConstants.ID)
                .pluginName(PluginEnum.GRPC.getName())
                .name("grpc-rule")
                .handle(GsonUtils.getInstance().toJson(grpcRuleHandle))
                .matchMode(MatchModeEnum.AND.getCode())
                .conditionDataList(Collections.singletonList(conditionData))
                .loged(false)
                .enabled(true)
                .sort(Integer.MAX_VALUE).build();

        MetaData metaData = new MetaData();
        if (Objects.nonNull(annotations)) {
            metaData.setAppName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_APP_NAME, "grpc"));
            metaData.setMethodName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_METHOD_NAME, "hello"));
            metaData.setPath(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_PATH, "/grpc/helloService/hello"));
            metaData.setRpcType(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_RPC_TYPE, RpcTypeEnum.GRPC.getName()));
            metaData.setServiceName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_SERVICE_NAME, "hello.HelloService"));
            metaData.setContextPath(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_CONTEXT_PATH, "/grpc"));
            metaData.setRpcExt(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_RPC_EXPAND, "{\"timeout\":5000,\"methodType\":\"UNARY\"}"));
            metaData.setServiceName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_SERVICE_NAME, "hello.HelloService"));
            metaData.setParameterTypes(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_PARAMETER_TYPE, "hello.HelloRequest,io.grpc.stub.StreamObserver"));
            metaData.setEnabled(Boolean.parseBoolean(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_ENABLED, "true")));
        }
        return new IngressConfiguration(selectorData, Arrays.asList(ruleData), Arrays.asList(metaData));
    }
Parse ingress to ShenyuMemoryConfig.

@param ingress   ingress resource
@param coreV1Api coreV1Api
@return ShenyuMemoryConfig
shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/parser/GrpcParser.java