package
0.3.6
Repository: https://github.com/grpc-kit/pkg.git
Documentation: pkg.go.dev

# README

概述

提供grpc-kit微服务脚手架的通用配置规范,用于初始化框架所需的各个实例,仅允许"pkg/cfg"下的包直接引用"pkg/*"。

避免依赖以及通用性,"pkg/*"除"cfg"外,其他包必须可以独立给外部应用直接引用(非grpc-kit框架)。

术语约定

连接地址

参数类型说明示例
hoststring主机IPv4或IPv6地址127.0.0.1
portint主机端口号6379
addressstring不包含协议,由主机IP与端口组成127.0.0.1:6379 或 [fe80::1%lo0]:53 或 unix socket
endpoints[]string由协议、IP、端口组成,多个通过逗号","分割https://node1:2379,https://node2:2379,https://node3:2379

其他类型

参数类型说明示例
driverstring配置支持的驱动etcdv3、redis等
enablebool是否开启这个功能true、false

配置示例

# https://github.com/grpc-kit/cfg/blob/master/app-sample.yaml

# 基础服务配置
services:
  # 服务注册的前缀,全局统一
  root_path: service
  # 服务注册的空间,全局统一
  namespace: example
  # 服务的代码,设置后不可变更
  service_code: cmdb.v1.commons
  # 接口网关的地址
  api_endpoint: api.grpc-kit.com
  # 服务所监听的grpc地址(如未设置,自动监听在127.0.0.1的随机端口)
  grpc_address: 127.0.0.1:10081
  # 服务所监听的http地址(如未设置,则不开启gateway服务)
  http_address: 127.0.0.1:10080
  # 服务注册,外部网络可连接的grpc地址(一般等同于grpc-address)
  public_address: ""

# 服务注册配置
discover:
  driver: etcdv3
  heartbeat: 15
  endpoints:
    - http://127.0.0.1:2379
  #discover:
  #  tls:
  #    ca_file: /opt/certs/etcd-ca.pem
  #    cert_file: /opt/certs/etcd.pem
  #    key_file: /opt/certs/etcd-key.pem

# 认证鉴权配置
security:
  enable: true
  # 认证:谁在登录
  authentication:
    # 跳过认证的rpc方法
    insecure_rpcs:
      - SearchHosts
    oidc_provider:
      issuer: https://accounts.example.com
      config:
        # 必须验证token.aud是否与client_id相等
        client_id: example
        # 允许的签名算法类别
        supported_signing_algs:
          - RS256
        # 忽略token.aud与client_id的验证
        skip_client_id_check: true
        # 忽略token是否过期的验证
        skip_expiry_check: false
        # 忽略token issuer的验证
        skip_issuer_check: true
    http_users:
      - username: user1
        password: pass1
  # TODO; 鉴权:能做什么
  authorization:

# 关系数据配置
database:
  driver: postgres
  dbname: demo
  user: demo
  password: grpc-kit
  host: 127.0.0.1
  port: 5432
  sslmode: disable
  connect_timeout: 10

# 缓存服务配置
cachebuf:
  enable: true
  driver: redis
  address: 127.0.0.1:6379
  password: ""

# 日志调试配置
debugger:
  enable_pprof: true
  log_level: debug
  log_format: text

# 链路追踪配置
opentracing:
  enable: true
  host: 127.0.0.1
  port: 6831
  
# 事件通道配置
cloudevents:
  protocol: "kafka_sarama"
  kafka_sarama:
    topic: "uptime-test"
    brokers:
      - 127.0.0.1:19092
      - 127.0.0.1:29092
      - 127.0.0.1:39092
    config:
      net:
        tls:
          enable: false
        sasl:
          enable: true
          mechanism: "SCRAM-SHA-256"
          user: "uptime"
          password: "testkey"
      producer:
        required_acks: 1
        return:
          successes: false
          errors: true
      consumer:
        group:
          rebalance:
            strategy: range
        offsets:
          auto_commit:
            enable: true
            interval: 1s
      version: "2.4.0"

# 应用私有配置
independent:
  name: grpc-kit

注册地址说明

在services中所配置的public-address地址是grpc服务,与其他服务之间必须能正常通讯。如果在k8s环境下可考虑设置环境变量GRPC_KIT_PUHLIC_IP把POD IP传递,如:

...
spec:
  template:
    spec:
      containers:
      - args:
        - /opt/service
        - --config
        - /opt/config/app.toml
        env:
        - name: GRPC_KIT_PUHLIC_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
...

# Functions

New 用于初始化获取全局配置实例.
NewHTTPTransport 创建默认的 http transport.
NewTLSConfig 根据 tls 配置初始化 tls.Config 实例.

# Constants

AuthenticationTypeBasic 用于http basic认证.
AuthenticationTypeBearer 用于jwt认证.
AuthenticationTypeNone 用于指明rpc未使用任何认证.
No description provided by the author
No description provided by the author
No description provided by the author
HTTPHeaderEtag 文件内容签名.
HTTPHeaderHost 主机头.
HTTPHeaderRequestID 全局请求ID.
No description provided by the author
No description provided by the author
ScopeNameGRPCKit 用于该包产生链路、指标的权威名称.
No description provided by the author
No description provided by the author
No description provided by the author
UsernameAnonymous 当未使用任何认证时的用户名.

# Variables

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
SHA256 hash generator function for SCRAM conversation.
SHA512 hash generator function for SCRAM conversation.

# Structs

Authentication 用于认证.
Authorization 用于鉴权.
BasicAuth 用于HTTP基本认证的用户权限定义.
CachebufConfig 缓存配置,区别于数据库配置,缓存的数据可以丢失.
CloudEventsConfig cloudevents事件配置.
ConnectionPool 数据库连接池配置.
DatabaseConfig 数据库设置,指关系数据库,数据不允许丢失,如postgres、mysql.
DebuggerConfig 日志配置,用于设定服务启动后日志输出级别格式等.
DiscoverConfig 服务注册,服务启动后如何汇报自身.
ExporterEnable 配置是否启用特定 exporter.
ExportersConfig 可观测遥感数据导出目标地址.
FrontendConfig 用于表示前端配置.
FrontendInterface 表示前端界面配置.
GRPCService 用于 gRPC 服务配置.
HTTPConfig 用于控制客户端通过 http 协议连接服务端的一些能力.
HTTPService 用于 HTTP 服务配置.
IDTokenClaims 用于框架jwt的数据结构.
KafkaSarama xx.
LocalConfig 本地配置,全局微服务配置结构.
ObjstoreAttributes 对象属性信息,如:last_modified、etag 等.
ObjstoreConfig 对象存储相关配置.
ObservablesConfig 用于客观性配置.
OIDCConfig 用于OIDC验证相关配置.
OIDCProvider 用于OIDC认证提供方配置.
OPAEnvoyPlugin 使用 envoy 的 opa 插件服务.
OPAExternal 外部的 opa 服务.
OPANative 内嵌的 opa 组件.
OTLPGRPCConfig 使用 otlp grpc 协议上报数据.
OTLPHTTPConfig 使用 otlp http 协议上报数据.
ProxyBucket xx.
S3Bucket 用于实现 ObjstoreBucket 简化对象存储接口的使用.
S3Config 对象存储 S3 的标准配置.
SaramaConfig 用于kafka客户端配置,结构等同于sarama类库 https://pkg.go.dev/github.com/Shopify/sarama#Config.
SecurityConfig 安全配置,对接认证、鉴权.
ServicesConfig 基础服务配置,用于设定命名空间、注册的路径、监听的地址等.
SSEConfig 用于配置对象存储服务端加密 https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html#s3-encryption-context.
TelemetryConfig xx.
TelemetryMetric 性能指标个性配置.
TelemetryTrace 链路跟踪个性配置.
TLSAutoConfig 用于证书的自动化生成.
TLSConfig 用于配置客户端与服务端 tls 相关行为.
WebInterfaceConfig 表示前端界面组件配置.
XDGSCRAMClient struct to perform SCRAM conversation.

# Interfaces

ObjstoreBucket 抽象化包装,以简化使用,读写操作权限.
ObjstoreBucketReader 抽象化包装,以简化使用,只读操作权限.

# Type aliases

URLStyle 对象存储访问的 url 风格类型 https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAPI.html.