feat(ql3): establish 3.0 incubation baseline

This commit is contained in:
whyour
2026-08-12 00:25:26 +08:00
parent 4bf92dcfeb
commit c699c32461
2817 changed files with 779642 additions and 653 deletions
@@ -0,0 +1,19 @@
# Model provider credential test executor
This is a caller-created, one-shot Job. Create the durable test plan through
`provider-credential.test.plan`, copy its `testId` into a fresh command, use a
fresh `executionId`, and instantiate a new Job name from the template.
The base admits only DNS. Production activation requires both the reviewed
PostgreSQL overlay and a deployment-specific private provider CIDR patch.
The application independently enforces the exact canonical HTTPS URL and
zero-retry/zero-cost budgets from the same allowlist mounted by the manager.
If the provider uses a private CA, also apply the public-only provider CA patch;
it adds `NODE_EXTRA_CA_CERTS` and a read-only CA projection without mounting a
client key or any provider credential.
The long-lived provider credential manager never mounts provider Secret
material and never receives provider egress. Only this Job mounts the one
project-scoped material file selected by the durable binding. An existing
execution intent is never sent to the provider again: the Job returns either
the durable result or `outcome_unknown`.
@@ -0,0 +1,135 @@
apiVersion: batch/v1
kind: Job
metadata:
name: ql3-provider-credential-test-executor
namespace: qinglong3-system
labels:
app.kubernetes.io/name: ql3-provider-credential-test-executor
app.kubernetes.io/component: provider-credential-test-executor
app.kubernetes.io/part-of: qinglong3
qinglong.io/execution-model: caller-driven
spec:
backoffLimit: 0
activeDeadlineSeconds: 60
ttlSecondsAfterFinished: 300
template:
metadata:
labels:
app.kubernetes.io/name: ql3-provider-credential-test-executor
app.kubernetes.io/component: provider-credential-test-executor
app.kubernetes.io/part-of: qinglong3
qinglong.io/execution-model: caller-driven
spec:
serviceAccountName: ql3-provider-credential-test-executor
automountServiceAccountToken: false
enableServiceLinks: false
restartPolicy: Never
securityContext:
runAsNonRoot: true
runAsUser: 10001
runAsGroup: 10001
fsGroup: 10001
seccompProfile:
type: RuntimeDefault
containers:
- name: executor
image: qinglong3-cluster-admin:3.0.0-alpha.0
imagePullPolicy: IfNotPresent
command:
- node
- /opt/qinglong/node_modules/@qinglong/cluster-admin/dist/model-provider-credential/modelProviderCredentialTestExecutorCli.js
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
env:
- name: QL3_PROFILE
value: cluster-admin
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_EXECUTOR_ENABLED
value: 'true'
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_WRITE_TERMINATION_MESSAGE
value: 'true'
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_COMMAND_FILE
value: /var/run/qinglong3/provider-credential-test/command.json
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_ALLOWLIST_FILE
value: /var/run/qinglong3/provider-credential-test/allowlist.json
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_SECRET_ROOT
value: /var/run/secrets/qinglong3/provider-credential-test
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_DENY_CANARY_HOST
value: kubernetes.default.svc
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_DENY_CANARY_PORT
value: '443'
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_TLS_MODE
value: verify-full
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_TLS_CA_FILE
value: /var/run/secrets/qinglong3/postgres-ai-credential-tester/ca.crt
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_APPLICATION_NAME
value: qinglong3-ai-credential-tester
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_POOL_MAX
value: '1'
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_URL
valueFrom:
secretKeyRef:
name: ql3-cluster-provider-credential-test-database
key: postgres-ai-credential-tester-url
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_TLS_SERVERNAME
valueFrom:
secretKeyRef:
name: ql3-cluster-provider-credential-test-database
key: postgres-tls-servername
resources:
requests:
cpu: 25m
memory: 48Mi
limits:
cpu: 500m
memory: 192Mi
volumeMounts:
- name: tmp
mountPath: /tmp
- name: command
mountPath: /var/run/qinglong3/provider-credential-test
readOnly: true
- name: provider-secret
mountPath: /var/run/secrets/qinglong3/provider-credential-test
readOnly: true
- name: postgres-ai-credential-tester-ca
mountPath: /var/run/secrets/qinglong3/postgres-ai-credential-tester
readOnly: true
volumes:
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 8Mi
- name: command
projected:
defaultMode: 292
sources:
- configMap:
name: ql3-provider-credential-test-command
items:
- key: command.json
path: command.json
- configMap:
name: ql3-provider-credential-test-allowlist
items:
- key: allowlist.json
path: allowlist.json
- name: provider-secret
secret:
secretName: ql3-provider-credential-test-material
defaultMode: 288
items:
# SHA-256 of the canonical qlsecret:v1 SecretRef selected by the
# durable binding. Replace both the key and path together.
- key: 31cf30a7b013bd31aa88867b1a8c48e35e7b88b5b49fb37eedd6222354679d02
path: 31cf30a7b013bd31aa88867b1a8c48e35e7b88b5b49fb37eedd6222354679d02
- name: postgres-ai-credential-tester-ca
secret:
secretName: ql3-cluster-provider-credential-test-database
defaultMode: 292
items:
- key: postgres-ca.crt
path: ca.crt
@@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- service-account.yaml
- job.yaml
- network-policy.yaml
@@ -0,0 +1,33 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: ql3-provider-credential-test-executor
namespace: qinglong3-system
labels:
app.kubernetes.io/name: ql3-provider-credential-test-executor
app.kubernetes.io/component: provider-credential-test-executor
app.kubernetes.io/part-of: qinglong3
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: ql3-provider-credential-test-executor
app.kubernetes.io/component: provider-credential-test-executor
policyTypes:
- Ingress
- Egress
ingress: []
# Base is deliberately non-functional: DNS only. A reviewed PostgreSQL
# overlay and an exact private provider CIDR overlay are both required.
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
@@ -0,0 +1,10 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: ql3-provider-credential-test-executor
namespace: qinglong3-system
labels:
app.kubernetes.io/name: ql3-provider-credential-test-executor
app.kubernetes.io/component: provider-credential-test-executor
app.kubernetes.io/part-of: qinglong3
automountServiceAccountToken: false
@@ -0,0 +1,51 @@
- op: replace
path: /spec/template/spec/containers/0/env
value:
- name: QL3_PROFILE
value: cluster-admin
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_EXECUTOR_ENABLED
value: 'true'
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_WRITE_TERMINATION_MESSAGE
value: 'true'
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_COMMAND_FILE
value: /var/run/qinglong3/provider-credential-test/command.json
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_ALLOWLIST_FILE
value: /var/run/qinglong3/provider-credential-test/allowlist.json
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_SECRET_ROOT
value: /var/run/secrets/qinglong3/provider-credential-test
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_DENY_CANARY_HOST
value: kubernetes.default.svc
- name: QL3_MODEL_PROVIDER_CREDENTIAL_TEST_DENY_CANARY_PORT
value: '443'
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_TLS_MODE
value: verify-full
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_TLS_CA_FILE
value: /var/run/secrets/qinglong3/postgres-ai-credential-tester/ca.crt
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_APPLICATION_NAME
value: qinglong3-ai-credential-tester
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_POOL_MAX
value: '1'
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_HOST
value: ql3-postgres-rw.qinglong3-system.svc
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_PORT
value: '5432'
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_DATABASE
value: qinglong
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_USER
valueFrom:
secretKeyRef:
name: ql3-postgres-ai-credential-tester-auth
key: username
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_PASSWORD
valueFrom:
secretKeyRef:
name: ql3-postgres-ai-credential-tester-auth
key: password
- name: QL3_POSTGRES_AI_CREDENTIAL_TESTER_TLS_SERVERNAME
value: ql3-postgres-rw.qinglong3-system.svc
- op: replace
path: /spec/template/spec/volumes/3/secret/secretName
value: ql3-postgres-ca
- op: replace
path: /spec/template/spec/volumes/3/secret/items/0/key
value: ca.crt
@@ -0,0 +1,24 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../base
patches:
- path: job-patch.yaml
target:
group: batch
version: v1
kind: Job
name: ql3-provider-credential-test-executor
- path: network-policy-patch.yaml
target:
group: networking.k8s.io
version: v1
kind: NetworkPolicy
name: ql3-provider-credential-test-executor
images:
- name: qinglong3-cluster-admin
newName: registry.example.com/qinglong/qinglong3-cluster-admin
digest: sha256:0000000000000000000000000000000000000000000000000000000000000000
@@ -0,0 +1,26 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: ql3-provider-credential-test-executor
namespace: qinglong3-system
spec:
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
- to:
- podSelector:
matchLabels:
cnpg.io/cluster: ql3-postgres
ports:
- protocol: TCP
port: 5432
@@ -0,0 +1,41 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: ql3-provider-credential-test-command
namespace: qinglong3-system
data:
command.json: |
{"schemaVersion":1,"executionId":"REPLACE_WITH_UUID_V4","testId":"REPLACE_WITH_PLAN_TEST_ID"}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: ql3-provider-credential-test-allowlist
namespace: qinglong3-system
data:
allowlist.json: |
{"schema":"qinglong/model-provider-credential-test-allowlist@v1","revision":"catalog-v1","providers":[{"provider":"openai-compatible","adapter":"openai-compatible","baseUrl":"https://provider.example.test/v1/","revision":"endpoint-v1","deadlineMs":5000,"maxResponseBytes":65536,"maxModels":64,"maxCostMicrousd":0,"retryLimit":0,"configDigest":"10ba6d6a33126ce623d63123b20994d177ed1da7720b4ebe335ca0e5dfc33db6"}],"catalogDigest":"86553a3cbcd8ea3e3d0b73fc310997c1060f6e39d5fe1deb8593b1b8fd098582"}
---
# Example only. Populate through a Secret manager and never commit a real token.
# The key is SHA-256(canonical SecretRef) and must match the durable binding.
apiVersion: v1
kind: Secret
metadata:
name: ql3-provider-credential-test-material
namespace: qinglong3-system
type: Opaque
stringData:
31cf30a7b013bd31aa88867b1a8c48e35e7b88b5b49fb37eedd6222354679d02: REPLACE_WITH_PROVIDER_TOKEN
---
# Non-CloudNativePG example. The CloudNativePG overlay uses its operator-owned
# role Secret plus ql3-postgres-ca instead.
apiVersion: v1
kind: Secret
metadata:
name: ql3-cluster-provider-credential-test-database
namespace: qinglong3-system
type: Opaque
stringData:
postgres-ai-credential-tester-url: REPLACE_WITH_TESTER_DSN
postgres-tls-servername: REPLACE_WITH_POSTGRES_DNS_NAME
postgres-ca.crt: REPLACE_WITH_POSTGRES_CA_PEM
@@ -0,0 +1,23 @@
# When the private HTTPS provider uses a private CA, project only its public
# trust anchor. This patch never mounts provider credentials or a client key.
- op: add
path: /spec/template/spec/containers/0/env/-
value:
name: NODE_EXTRA_CA_CERTS
value: /var/run/secrets/qinglong3/provider-ca/ca.crt
- op: add
path: /spec/template/spec/containers/0/volumeMounts/-
value:
name: provider-ca
mountPath: /var/run/secrets/qinglong3/provider-ca
readOnly: true
- op: add
path: /spec/template/spec/volumes/-
value:
name: provider-ca
secret:
secretName: ql3-provider-credential-test-provider-ca
defaultMode: 292
items:
- key: ca.crt
path: ca.crt
@@ -0,0 +1,12 @@
# Standard NetworkPolicy cannot select an FQDN. Resolve the exact private
# provider endpoint through controlled DNS, pin its routed private CIDR here,
# and keep the same canonical HTTPS URL in the signed allowlist ConfigMap.
- op: add
path: /spec/egress/-
value:
to:
- ipBlock:
cidr: 10.42.7.19/32
ports:
- protocol: TCP
port: 443