dapr 配置主要分为三部分: 全局配置, 组件配置和运行时配置.
全局配置和组件配置是以 yaml 形式定义的, 而且直接使用 k8s crd 类型, 例如:
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
namespace: default
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "<http://localhost:9411/api/v2/spans>"
熟悉 k8s 的人应该可以看出来这就是 CRD 的类型. 全局配置的 kind 类型为 Configuration
, 组件配置 kind 类型为 Component
.
dapr 支持本地运行和 k8s 环境运行, 使用 crd 定义配置时, 在 k8s 环境用户可以用非常熟悉的 kubectl
来更改配置. 在本地环境时, 由于 yaml 本身就是结构化的, 所以直接读取文件也能拿到定义的类型.
全局配置类型定义在 pkg/config/configuration.go 中:
type Configuration struct {
metav1.TypeMeta `json:",inline" yaml:",inline"`
// See <https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata>
metav1.ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty"`
// See <https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status>
Spec ConfigurationSpec `json:"spec" yaml:"spec"`
}
type ConfigurationSpec struct {
HTTPPipelineSpec PipelineSpec `json:"httpPipeline,omitempty" yaml:"httpPipeline,omitempty"`
TracingSpec TracingSpec `json:"tracing,omitempty" yaml:"tracing,omitempty"`
MTLSSpec MTLSSpec `json:"mtls,omitempty"`
MetricSpec MetricSpec `json:"metric,omitempty" yaml:"metric,omitempty"`
Secrets SecretsSpec `json:"secrets,omitempty" yaml:"secrets,omitempty"`
AccessControlSpec AccessControlSpec `json:"accessControl,omitempty" yaml:"accessControl,omitempty"`
NameResolutionSpec NameResolutionSpec `json:"nameResolution,omitempty" yaml:"nameResolution,omitempty"`
Features []FeatureSpec `json:"features,omitempty" yaml:"features,omitempty"`
APISpec APISpec `json:"api,omitempty" yaml:"api,omitempty"`
}
根据上面类型代码, 可以看出主要控制下面几种功能: