您的位置:首页 > 游戏 > 手游 > 成都住建局官网怎么查新房备案_聚名网站_优化设计四年级上册语文答案_友情链接怎么购买

成都住建局官网怎么查新房备案_聚名网站_优化设计四年级上册语文答案_友情链接怎么购买

2024/10/6 5:56:54 来源:https://blog.csdn.net/weixin_43632687/article/details/142493875  浏览:    关键词:成都住建局官网怎么查新房备案_聚名网站_优化设计四年级上册语文答案_友情链接怎么购买
成都住建局官网怎么查新房备案_聚名网站_优化设计四年级上册语文答案_友情链接怎么购买
  1. 创建namespace
sudo kubectl create namespace compose
  1. 部署ETCD
apiVersion: apps/v1
kind: StatefulSet
metadata:name: etcdnamespace: composelabels:app: etcd
spec:serviceName: etcdreplicas: 1selector:matchLabels:app: etcdtemplate:metadata:labels:app: etcdspec:containers:- name: etcdimage: quay.io/coreos/etcd:v3.4.15ports:- containerPort: 2379- containerPort: 2380command:- /usr/local/bin/etcd- --data-dir=/var/lib/etcd- --name=$(POD_NAME)- --listen-peer-urls=http://0.0.0.0:2380- --listen-client-urls=http://0.0.0.0:2379- --advertise-client-urls=http://$(POD_IP):2379- --initial-advertise-peer-urls=http://$(POD_IP):2380- --initial-cluster=$(POD_NAME)=http://$(POD_IP):2380- --initial-cluster-token=etcd-cluster- --initial-cluster-state=newenv:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIPvolumeMounts:- name: etcd-datamountPath: /var/lib/etcdvolumeClaimTemplates:- metadata:name: etcd-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:name: etcdnamespace: compose
spec:type: NodePortports:- port: 2379name: a-nametargetPort: 2379nodePort: 30379- port: 2380name: b-nametargetPort: 2380nodePort: 30380selector:app: etcd
  1. 进入pod添加root用户
# 使用 etcdctl 创建 root 用户
etcdctl user add root
# 系统会提示输入密码# 创建一个管理员角色
etcdctl role add root# 为 root 角色赋予读写权限
etcdctl role grant-permission root readwrite /# 将 root 用户赋予 root 角色
etcdctl user grant-role root root# 启用 etcd 的认证功能
etcdctl auth enable
  1. 创建普通用户
etcdctl user add user1
# 创建一个自定义角色
etcdctl role add readwrite# 为该角色赋予读写权限,仅对指定路径(如 `/config/`)
etcdctl role grant-permission readwrite readwrite /config/# 将用户赋予这个角色
etcdctl user grant-role user1 readwrite# 以 user1 用户的身份操作 etcd
etcdctl --user=user1:password get /config/appsetting
  1. yaml 启用认证
command:- etcd- --auth-token=simple
  1. 安装dotnet-etcd
> dotnet-etcd                 7.1.1   7.1.1
  1. 声明帮助类
using dotnet_etcd;
using Etcdserverpb;
using Google.Protobuf;
using Grpc.Core;namespace coreETCD
{public class ETCDHelper{private readonly EtcdClient etcdClient;private AuthenticateResponse authenticateResponse;public ETCDHelper(){etcdClient = new EtcdClient("http://192.168.214.133:30379", configureChannelOptions: (options =>{options.Credentials = ChannelCredentials.Insecure;}));authenticateResponse = etcdClient.Authenticate(new Etcdserverpb.AuthenticateRequest(){Name = "ellis",Password = "ellis",});// 观察字段CRUD时间etcdClient.WatchAsync("name", print, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}public async Task<PutResponse> PutConfig(string key, string value){return await etcdClient.PutAsync(key, value, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}public async Task<string> GetConfig(string key){return await etcdClient.GetValAsync(key, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}public async Task<Dictionary<string,string>> GetRange(string key){RangeResponse result =  await etcdClient.GetRangeAsync(key, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});Dictionary<string, string> dict = new Dictionary<string, string>();// 遍历并输出键值对foreach (var kv in result.Kvs){dict.Add(kv.Key.ToStringUtf8(), kv.Value.ToStringUtf8());}return dict;}public async Task<DeleteRangeResponse> DeleteKey(string key){return await etcdClient.DeleteAsync(key, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}// ----------------------------------// Print function that prints key and value from the minimal watch// response data private static void print(WatchEvent[] response){foreach (WatchEvent e1 in response){Console.WriteLine($"{e1.Key}:{e1.Value}:{e1.Type}");}}}
}
  1. DI
builder.Services.AddSingleton<ETCDHelper>();
  1. controller
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;namespace coreETCD.Controllers
{[Route("api/[controller]/[action]")][ApiController]public class ETCDController : ControllerBase{private readonly ETCDHelper _etcdHelper;public ETCDController(ETCDHelper etcdHelper){_etcdHelper = etcdHelper;}[HttpGet]public async Task<IActionResult> GetValue([FromQuery] string key){var value = _etcdHelper.GetConfig(key).Result;return Ok(value);}[HttpGet]public async Task<IActionResult> GetRangeValue([FromQuery] string key){var value = _etcdHelper.GetRange(key).Result;return Ok(value);}[HttpGet]public async Task<IActionResult> PutValue([FromQuery] string key,[FromQuery] string value){var result = _etcdHelper.PutConfig(key,value).Result;return Ok(result);}[HttpDelete]public async Task<IActionResult> DeleteKey([FromQuery] string key){var result = _etcdHelper.DeleteKey(key).Result;return Ok(result);}}
}
  1. 罗列etcd已经存储的配置
etcdctl --user=username:password get "" --prefix --keys-only

参考

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com