Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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
1
type 字段指定要使用的身份验证类型。
2
enable 字段允许您禁用特定的验证类型。这样,您只需要删除 auth 的整个部分才能禁用它。

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 编码。为这些条目生成值的最简单方法是使用 echobase64 命令:

$ 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