Cấu hình ứng dụng .NET Core sử dụng Consul

Trong .NET Core, việc đọc và quản lý cấu hình có thể được thực hiện thông qua các nguồn外部 như Consul, một hệ thống quản lý cấu hình tập trung. Thư viện Winton.Extensions.Configuration.Consul cung cấp một cách hiệu quả để đọc các giá trị key-value từ Consul.

Đầu tiên, bạn cần thêm thư viện này vào dự án của mình để bắt đầu sử dụng. Thư viện này không chỉ cho phép đọc cấu hình từ Consul mà còn có khả năng tải lại cấu hình một cách động態 sau khi có thay đổi. Về cơ bản, thư viện này sử dụng một vòng lặp while để theo dõi các thay đổi liên tục.

Dưới đây là một ví dụ về cách配置 các tùy chọn để lắng nghe các thay đổi cấu hình:

services.Configure<PositionSettings>(
    this.Configuration.GetSection("PositionSettings"),
    configureSettings: settings =>
    {
        Console.WriteLine(settings["Position"]);
    });

Nếu một interface nào đó không được implement đầy đủ, sẽ có một ngoại lệ được kích hoạt. Ví dụ:

cfgBuilder.AddConsul(
    "my.config.json",
    options =>
    {
        options.IsOptional = true;
        options.EnableReload = true;
        options.OnLoadError = e => HandleLoadError(e);
        options.OnWatchError = e => HandleWatchError(e);
        options.PollingInterval = TimeSpan.FromSeconds(10);
        options.ConsulConfig = cco =>
        {
            cco.ServerAddress = consulConf.Server;
            cco.DataCenter = consulConf.Region;
            cco.AuthToken = consulConf.Token;
        };
    });

Một lỗi phổ biến có thể xảy ra trong các ứng dụng background process, nơi có một main thread và một thread phụ trách đọc các giá trị KV từ Consul. Nếu main thread bị đóng lại nhưng thread đọc cấu hình vẫn tiếp tục hoạt động, nó sẽ gây ra các lỗi IO.

Thông tin chi tiết về lỗi:

System.Threading.Tasks.TaskCanceledException: The operation was canceled.

System.IO.IOException: Unable to read data from the transport connection: Operation canceled.

System.Net.Sockets.SocketException (125): Operation canceled

Link nguồn code: ConsulConfigurationProvider.cs

Để triển khai Consul trong Kubernetes, bạn có thể thực hiện các bước sau:

  1. Install Consul sử dụng Helm:
NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                            AGE
consul-connect-injector   ClusterIP   10.103.51.243    <none>        443/TCP                                                                            38d
consul-dns                ClusterIP   10.96.212.39     <none>        53/TCP,53/UDP                                                                      38d
consul-server             ClusterIP   None             <none>        8500/TCP,8502/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP   38d
consul-ui                 ClusterIP   10.110.157.219   <none>        80/TCP
  1. Truy cập giao diện Consul thông qua port-forward:
kubctl port-forward --address 0.0.0.0 services/consul-ui 8085:80
  1. Deploy ingress để truy cập Consul UI:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: consul-ui-ingress
  namespace: consul
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /consul
        pathType: Prefix
        backend:
          service:
            name: consul-ui
            port:
              number: 80

Thẻ: .net core consul Configuration Kubernetes Helm

Đăng vào ngày 25 tháng 8 lúc 04:20