Author

The Kubernetes termination lifecycle

The Kubernetes termination lifecycle Once Kubernetes has decided to terminate your pod, a series of events takes place. Let’s look at each step of the Kubernetes termination lifecycle. The container termination sequence 1 – Pod is set to the “Terminating” State and removed from the endpoints list of all Services At this point, the pod... » read more

文件下载: 自动把字段内容生成文件并下载

在上一篇文章,我们实现了SSH 私钥的“内容直接输入与文件上传双重输入方式”,那么我们在 console 上主动生成一个 SSH 私钥(非本地上传),当请求成功时,如何本地能同时得到生成的私钥文件呢? 实现 API 响应: { "code": 0, "message": "ok", "data": { "name": "test", "key_material": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA74RDDw+mCR4Z4N6S9VYiiKc487lhcRMYWyUi/rjlS5eBzEqh\nf61dzLs+lmBFfxFttq3lc0zUaseQWh+Ue6bcp2qEQUYvX+iXq1LV8Evhzn+hTnFQ\n/blpl8HUi+ykp0czacyBOeKmztJfrJgE2DHtiSIAXBHiBGF2R4/mR4DQvgNA2BtC\npzQIVt8/CghoVT1UpjNA6SxtxsKMCpn/R9bBh51Tfpu5KUgyJHUeEZYUdCAsAVFB\naruqljiA3FTzpGUbhDIPAFQJGCfpIs4oviHloPkbVzAJGSMUC9qKkuDH1GG0fQdC\nTPfcPooHzngOH60dgUGlmKLqNrNT8A03ntHehwIDAQABAoIBABUHbcPSwecnB2qg\n4BI+P8XzuKJdclq1LHxEJHBs12Ttpm3DV66YEBY7kmEtjqx7YUCav/yBkFzXrKrc\n/vJkUhc42OfKO7qV90sJeNMiNm8k8YqrlErSjpzOXdTzL/mn3LG7TNVCOxcJjXDf\n3/0DVTGnFJUA1PFBhVr/HV7Fxo4IG5gMq+hj0YtYlp4zRp/kDF22OGJaqudvVFI1\nBYtOsWDz7BaXxuNMTw0SjphYW+7+CWyXFh8799p1uptO05CL0Os//2k7WNLrHcNR\nh0YMXFJLwFURxxmPEsT9uKKFSjsyvEQjxJlV3x85GLPSc+pRedDYc9F42bN2c++E\ntHwzZoECgYEA8RiKBj7gqUNhrZerhh8bAtMGakNbe1OIr826nB2DDtgVAWsvO4fQ\n4kNGidqbPfNIS1SEtuaJAEa2DiJu2z7w8bl89YJq20iABFysDfdMBRsQuQN9O/Lx\nrQtVY5UKdTFq/xVKm8tJeMNPCQKXgRlXIvIDmUeWRQprvhOs/7iZ1OcCgYEA/lK7\nJe/bVpIxwegXFducH70rrWx3G9JtCRrpL7gnLTqkTbFfQW5tJxCJnzVV8VDLZtTR\nZ0Py/rwstiDJZ4diH7CBjMHb6xArjlp/PfF5Uds8433e7b73dfK0xis4nS5xnbJ6\n3DPNJ+dsHc9ikIy5odSi1a9t2ZG2N10ai6381WECgYB0scT02vBQ3R1lMXlDFME1\nL8D2JB4eZkNNnI1LTPmHcM1R/3hAHy/apGd7CAWGCcAfPgxynskHCjLKSp5Pnnpu\n9bHm/zYLZ18XPWfF5sGz4vLIKkkugBu7/zVYWuZR7RZ12u9e0xl/y0DxAoEkaoiD\nkJJvWXgBeNbHjKx6pfZHVwKBgDnONBt7WS9kK0sXpaeiMupD5RmV/bylJ4NaSoY+\nJSlymsXN+wi0QLsQVzeIt/ARnSnSVYZTO3gK7V64NQ8DBpqNU+Taa1ISatQAXcuG\nhzzDyCMtCO6g6T413EDusf+H/usJFkPWwlq/jyN3b7/LPKY73ocTSLSbGf+bed0l\nvsIBAoGAHEWmPgrXMwj5aN2OJwSY3JHt7rkqihhbIE3s7sR4g3H6xBlkdiKkacg4\nFgXmITIiEQUwM0eIuzrLfcxtM0aTUjClg+GE1+T4qw1efnhNYlhsJVRc3pMzjta5\npxOHfLyTvv0lcv/1AqAhKzu7r64f5lyUMFNcF33LWifZBhcI+5s=\n-----END RSA PRIVATE KEY-----\n" } } 实现方案: 用户点击生成密钥对按钮 amis 请求后台,拿到密钥对 amis 自动弹出下载/保存对话或直接下载(JS动作,生成blob并自动触发下载) *** reload 当前界面 { "type": "container", "align": "right", "behavior": [ "FuzzyQuery" ], "body": [ { "type": "button", "label": "创建秘钥对", "onEvent": {... » read more

实现内容输入与文件上传双重输入方式

具体场景 以私钥的输入为例,用户既可以直接输入私钥内容,也可以上传指定的文件。 如何实现 用 tabs 或 select 控件自由切换输入/上传方式,是 AMis 推荐的模式。 { "type": "button", "label": "新增", "level": "primary", "className": "m-r-xs", "behavior": "Insert", "onEvent": { "click": { "actions": [ { "actionType": "dialog", "dialog": { "type": "dialog", "title": "新增数据", "body": [ { "id": "u:2b9e1961e997", "type": "form", "title": "新增数据", "mode": "flex", "labelAlign": "top", "dsType": "api", "feat": "Insert", "body": [... » read more

页面跳转携带参数

父级页面跳转 { "type": "dropdown-button", "label": "服务和环境", "buttons": [ { "type": "button", "label": "服务管理", "onEvent": { "click": { "actions": [ { "ignoreError": false, "actionType": "url", "args": { "url": "/project/project/service", "params": { "project_id": "${id}" } } } ] } }, "id": "u:ed81ff6d4113" }, { "type": "button", "label": "环境管理", "onEvent": { "click": { "actions": [ { "ignoreError": false,... » read more

组件联动

具体的场景 服务器资源根据用户选择“项目”, “环境”, “区域”来刷新界面,同时选择“项目”会刷新“环境”的选项。 { "type": "container", "body": [ { "type": "picker", "label": "项目", "name": "project", "overflowConfig": { "maxTagCount": -1, "displayPosition": [ "select" ] }, "modalClassName": "app-popover :AMISCSSWrapper", "id": "u:2f60910808e0", "multiple": false, "embed": false, "modalMode": "drawer", "source": "/project/v1/project", "labelField": "name", "valueField": "resource_id", "onEvent": { "change": { "weight": 0, "actions": [ { // 被 action 的组件不要使用... » read more

gitlab package registry
gitlab package registry

前提: 有一个部署在 AWS ec2 实例上的 gitlab ,并有管理这个账号的相关权限。 开启 Package Registry, 并使用 S3 bucket ################################################################################ ## Package repository ##! Docs: https://docs.gitlab.com/ee/administration/packages/ ################################################################################ # gitlab_rails['packages_enabled'] = true # gitlab_rails['packages_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/packages" # gitlab_rails['packages_object_store_enabled'] = false # gitlab_rails['packages_object_store_proxy_download'] = false # gitlab_rails['packages_object_store_remote_directory'] = "packages" # gitlab_rails['packages_object_store_connection'] = { # 'provider' => 'AWS', # 'region' => 'eu-west-1', # 'aws_access_key_id'... » read more

Deploy ReplicaSet With Keyfile Authentication
Deploy ReplicaSet With Keyfile Authentication

Deploy ReplicaSet With Keyfile Authentication ① Create a keyfile openssl rand -base64 756 > mongodb.key # chmod 400 <path-to-keyfile> ② Copy the keyfile to each replica set member sudo mv mongodb.key /var/lib/mongodb sudo chown mongodb:mongodb /var/lib/mongodb/mongodb.key sudo chmod 400 /var/lib/mongodb/mongodb.key ③ Start each member of the replica set with access control enabled net: port: 27017... » read more

CloudFront – 限制访问 ALB

CloudFront – 限制访问 ALB 对于 Web 应用程序或由 Elastic Load Balancing 中的 ApplicationLoad Balancer 提供的其他内容,CloudFront 可以缓存对象并将它们直接提供给用户(查看者),从而减少 Application Load Balancer的负载。但是,如果用户可以绕过 CloudFront 并直接访问 Application Load Balancer,则无法获得这些益处。 但是,您可以配置 AmazonCloudFront 和 Application Load Balancer,以防止用户直接访问 Application Load Balancer。这使得用户只能通过 CloudFront 访问 Application Load Balancer,从而确保您获得使用 CloudFront 的益处。 1. 自定义 HTTP 标头 CloudFront – 限制访问 Application Load Balancer 要防止用户直接访问 Application Load Balancer 并仅允许通过 CloudFront... » read more

cloudfront实现nginx的行为

默认根对象 如果您定义默认根对象,最终用户对分配的子目录的请求不返回默认根对象。例如,假设 index.html 是您的默认根对象且 CloudFront 接收最终用户对 CloudFront 分配下的 install 目录的请求: https://d111111abcdef8.cloudfront.net/install/ CloudFront 不会返回默认根对象,即使 index.html 的副本出现在install目录中。 此时一个空资源作为文件被下载下来 这与我们常用的nginx目录访问明显的不同 实现与nginx类似的行为 以下示例函数会将 index.html 附加到不在 URL 中包含文件名或扩展名的请求中。此函数对于托管在 Amazon S3 存储桶中的单页应用程序或静态生成的网站非常有用。 在 GitHub 上查看此示例 function handler(event) { var request = event.request; var uri = request.uri; // Check whether the URI is missing a file name. if (uri.endsWith('/')) { request.uri +=... » read more

图片优化
图片优化

图像优化 基于 CloudFront、S3 和 Lambda 的客户管理型解决方案 图像优化的最常见使用案例根据用户浏览器功能自动设置格式,并允许前端调整图像大小。诸如 Next.JS 之类的流行 Web 开发框架提供响应式图像组件,这些组件可以根据设备视口自动选择图像大小。下图说明了这种常见使用案例的推荐架构: 用户向采用特定转换(例如,编码和大小)的图像发送 HTTP 请求。转换在 URL 中编码,更确切地说是作为查询参数。示例 URL 如下所示:https://exmaples.com/images/cats/mycat.jpg?format=webp&width=200。 请求由附近的 CloudFront 边缘站点处理,可提供最佳性能。在向上游传递请求之前,对查看器请求事件执行 CloudFront 函数以重写请求 URL。CloudFront Functions 是 CloudFront 的一项功能,它允许您使用 JavaScript 编写轻量级函数,以进行大规模的对延迟敏感的 CDN 自定义。在我们的架构中,我们重写 URL 以验证请求的转换,并通过排列转换顺序对 URL 进行标准化,然后将其转换为小写以提高缓存命中率。当请求自动转换时,该函数还会决定最适合应用哪种转换。例如,如果用户使用 format=auto 指令要求最优化的图像格式(JPEG、WebP 或 AVIF),则 CloudFront 函数将根据请求中存在的 Accept 标头选择最佳格式。 如果请求的图像已经缓存在 CloudFront 中,则缓存将被命中,并且图像将从 CloudFront 缓存中返回。为了提高缓存命中率,我们启用了 Origin Shield,这是 CloudFront 的一项功能,可在源服务器之前充当额外的缓存层,以进一步减轻请求负担。如果图像不在 CloudFront 缓存中,则请求将被转发到... » read more