我创建了一些使用 Azure Service Operator 部署 Azure 资源的 helm 图表。我的主要问题是如何从新创建的 Azure SQL 数据库中检索 ConnectionString 以将其传递给可能将其作为 Secret 使用的服务?
它是否应该成为 Helm 模板的一部分来根据输入创建秘密,或者是否有其他方法来处理它?
非常感谢
要从新创建的 Azure SQL 数据库检索连接字符串并将其传递给服务,您可以按照以下步骤操作 -
假设您创建了 SQL 服务器和数据库
检索连接字符串
CONNECTION_STRING=$(az sql db show-connection-string --server arkoazuresqlserver --name myazuresqldb --client ado.net --output tsv)
将连接字符串编码为base64
BASE64_CONNECTION_STRING=$(echo -n "$CONNECTION_STRING" | base64)
创建一个秘密
apiVersion: v1
kind: Secret
metadata:
name: azuresql-connection-string
namespace: default
type: Opaque
data:
connectionString: <base64-encoded-connection-string>
你可以验证一下-
现在,如果您想在应用程序部署中使用它,那么
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: SQL_CONNECTION_STRING
valueFrom:
secretKeyRef:
name: azuresql-connection-string
key: connectionString
如果您要通过 helm 方法,那么您可以编辑您的 template/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: azuresql-connection-string
namespace: {{ .Release.Namespace }}
type: Opaque
data:
connectionString: {{ .Values.connectionString | b64enc | quote }}
并使用连接字符串更新您的values.yaml
connectionString: "Server=tcp:arkoazuresqlserver.database.windows.net,1433;Initial Catalog=myazuresqldb;Persist Security Info=False;User ID=arko;Password=myStrongPassword!123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
然后重新部署舵图。