8.5. 代理身份验证
代理支持身份验证,这意味着连接到代理时,调用者必须提供每个请求的 Basic Auth 或 Bearer Auth 凭证。使用 curl
,它像提供一样简单:
-u <user_name>:<password>
或者
-h "Authorization: bearer <token>
至命令。服务目录必须配置有包含用户名和密码组合的 secret 或 bearer 令牌的 secret。
8.5.1. 基本验证
要启用 Basic Auth 使用,在代理配置中设置以下内容:
broker: ... auth: - type: basic 1 enabled: true 2
8.5.1.1. 部署模板和 Secret
通常,代理是使用部署模板中的 ConfigMap 进行配置。您提供身份验证配置的方式与文件配置文件中相同。
以下是部署模板的示例:
auth: - type: basic enabled: ${ENABLE_BASIC_AUTH}
Basic Auth 的另一个部分是用于向代理进行身份验证的用户名和密码。虽然基本 Auth 实施可以由不同的后端服务提供支持,但当前支持的一个 secret 由 secret 提供支持。secret 必须通过卷挂载(在 /var/run/asb_auth 位置)注入 pod。这是代理读取用户名和密码的位置。
在 部署模板 中,必须指定 secret。例如:
- apiVersion: v1 kind: Secret metadata: name: asb-auth-secret namespace: openshift-ansible-service-broker data: username: ${BROKER_USER} password: ${BROKER_PASS}
secret 必须包含用户名和密码。值必须采用 base64 编码。为这些条目生成值的最简单方法是使用 echo
和 base64
命令:
$ echo -n admin | base64 1
YWRtaW4=
- 1
n
选项非常重要。
此 secret 现在必须通过卷挂载传递给 pod。这在部署模板中也配置:
spec: serviceAccount: asb containers: - image: ${BROKER_IMAGE} name: asb imagePullPolicy: IfNotPresent volumeMounts: ... - name: asb-auth-volume mountPath: /var/run/asb-auth
然后,在 volumes
部分挂载 secret:
volumes: ... - name: asb-auth-volume secret: secretName: asb-auth-secret
上述命令将创建一个位于 /var/run/asb-auth 的卷挂载。此卷将有两个文件:由 asb-auth-secret 机密写入的用户名和密码。
8.5.1.2. 配置服务目录和代理通信
现在,代理配置为使用 Basic Auth,您必须告诉服务目录如何与代理通信。这通过代理资源的 authInfo
部分来完成。
以下是在服务目录中 创建代理
资源的示例。spec
告知服务目录代理正在侦听的 URL。authInfo
告诉它读取哪个 secret 获取身份验证信息。
apiVersion: servicecatalog.k8s.io/v1alpha1 kind: Broker metadata: name: ansible-service-broker spec: url: https://asb-1338-openshift-ansible-service-broker.172.17.0.1.nip.io authInfo: basicAuthSecret: namespace: openshift-ansible-service-broker name: asb-auth-secret
从服务目录的 v0.0.17 开始,代理资源配置更改:
apiVersion: servicecatalog.k8s.io/v1alpha1 kind: ServiceBroker metadata: name: ansible-service-broker spec: url: https://asb-1338-openshift-ansible-service-broker.172.17.0.1.nip.io authInfo: basic: secretRef: namespace: openshift-ansible-service-broker name: asb-auth-secret