tremolosecurity/openunison-k8s-operatorOpenUnison Operator为在Kubernetes和OpenShift上运行的OpenUnison实例提供运维自动化机制。该Operator会生成运行OpenUnison所需的密钥和对象,包括证书密钥生成、Kubernetes/OpenShift资源创建、SAML2元数据导入、数据库初始化及ActiveMQ部署等,旨在简化OpenUnison的运维管理流程。
keytool 即可生成证书和密钥Secret、Deployment、Service和Ingress规则Route、DeploymentConfig、ImageStream和BuildOperators有助于自动化常见任务。对于OpenUnison,最常见的任务与证书管理和服务账户相关。例如,当与远程SAML2身份提供商(如Active Directory Federation Services)配合使用时,OpenUnison可以检查可信证书是否已轮换,如有需要则自动重新部署,无需管理员干预。
!OpenUnison Operator与SAML2
除了自动化常见运维任务外,Operator还提供了Kubernetes原生方式更新OpenUnison配置。现在更新配置只需更新Kubernetes中的对象,无需手动生成密钥库或网络配置。
在OCP4内部,进入Operator Hub并搜索OpenUnison认证Operator:
!OpenUnison Operator在OCP4 OperatorHub中
OpenUnison Operator在OpenUnison将要运行的命名空间中以最小权限运行。部署Operator前,需要以具有部署CRD对象权限的身份安装OpenUnison的CRD:
kubectl create -f [***]
CRD部署完成后,作为命名空间管理员,需要创建RBAC规则和ServiceAccount:
kubectl create -f [***] -n openunison
最后部署Operator。在OpenShift上运行时,使用OpenShift原生对象:
kubectl create -f XXXXXXX
在Kubernetes上:
kubectl create -f [***] -n openunison
部署完成后,将运行一个pod,等待OpenUnison自定义资源的部署。
OpenUnison Operator会定期更新以修复已知CVE。升级Operator的最简单方法是终止Operator的pod,使其拉取最新版本。
使用转换器工具生成OpenUnison CR - TODO
OpenUnison自定义资源用于配置以下内容:
keytool)Secret(OpenUnison允许将参数集成到配置中,使配置可安全存储在源代码控制中并跨环境使用,这些数据现在来自Kubernetes对象,无需嵌入到单个大型密钥中)以下是Kubernetes的简单OpenUnison CR示例:
yamlapiVersion: openunison.tremolo.io/v1 kind: OpenUnison metadata: name: test-openunison namespace: openunison spec: image: tremolosecurity/openunison-simple replicas: 1 enable_activemq: false dest_secret: openunison source_secret: openunison-secrets-source hosts: - names: - name: test.apps.mydomain.com env_var: OU_HOST ingress_name: openunison secret_name: ou-tls-certificate secret_data: - unisonKeystorePassword - TEST_USER_PASSWORD - REG_CRED_PASSWORD non_secret_data: - name: REG_CRED_USER value: rh_user - name: TEST_USER_NAME value: testuser - name: MYVD_CONFIG_PATH value: WEB-INF/myvd.conf - name: unisonKeystorePath value: /etc/openunison/unisonKeyStore.p12 openunison_network_configuration: open_port: 8080 open_external_port: 80 secure_port: 8443 secure_external_port: 443 secure_key_alias: unison-tls force_to_secure: true activemq_dir: /tmp/amq quartz_dir: /tmp/quartz client_auth: none allowed_client_names: [] ciphers: - TLS_RSA_WITH_RC4_128_SHA - TLS_RSA_WITH_AES_128_CBC_SHA - TLS_RSA_WITH_AES_256_CBC_SHA - TLS_RSA_WITH_3DES_EDE_CBC_SHA - TLS_RSA_WITH_AES_128_CBC_SHA256 - TLS_RSA_WITH_AES_256_CBC_SHA256 path_to_deployment: /usr/local/openunison/work path_to_env_file: /etc/openunison/ou.env key_store: static_keys: - name: session-unison version: 1 trusted_certificates: - name: trusted-adldaps pem_data: |- -----BEGIN CERTIFICATE----- MIIDNDCCAhygAwIBAgIQbRNj6RKqtqVPvW65qZxXXjANBgkqhkiG9w0BAQUFADAi MSAwHgYDVQQDDBdBREZTLkVOVDJLMTIuRE9NQUlOLkNPTTAeFw0xNDAzMjgwMTA1 MzNaFw0yNDAzMjUwMTA1MzNaMCIxIDAeBgNVBAMMF0FERlMuRU5UMksxMi5ET01B SU4uQ09NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2s9JkeNAHOkQ 1QYJgjefUwcaogEMcaW/koA+bu9xbr4rHy/2gN/kc8OkoPuwJ/nNlOIO+s+MbnXS L9mUTC4OK7trkEjiKXB+D+VSYy6imXh6zpBtNbeZyx+rdBnaOv3ByZRnnEB8LmhM vHA+4f/t9fx/2vt6wPx//VgIq9yuYYUQRLm1WjyUBFrZeGoSpPm0Kewm+B0bhmMb dyC+3fhaKC+Uk1NPodE2973jLBZJelZxsZY40Ww8zYQwdGYIbXqoTc+1a/x4f1En m4ANqggHtw+Nq8zhss3yTtY+UYKDRBILdLVZQhHJExe0kAeisgMxI/bBwO1HbrFV +zSnk+nvgQIDAQABo2YwZDAzBgNVHSUELDAqBggrBgEFBQcDAQYIKwYBBQUHAwIG CisGAQQBgjcUAgIGCCsGAQUFBwMDMB0GA1UdDgQWBBTyJUfY66zYbm9i0xeYHuFI 4MN7uDAOBgNVHQ8BAf8EBAMCBSAwDQYJKoZIhvcNAQEFBQADggEBAM5kz9OKNSuX 8w4NOgnfIFdazd0nPlIUbvDVfQoNy9Q0S1SFUVMekIPNiVhfGzya9IwRtGb1VaBQ AQ2ORIzHr8A2r5UNLx3mFjpJmeOxQwlV0X+g8s+253KVFxOpRE6yyagn/BxxptTL a1Z4qeQJLD42ld1qGlRwFtVRmVFZzVXVrpu7NuFd3vlnnO/qKWXU+uMsfXtsl13n ec1kw1Ewq2jnK8WImKTQ7/9WbaIY0gx8mowCJSOsRq0TE7zK/N55drN1wXJVxWe5 4N32eCqotXy9j9lzdkNa7awb9q38nWVxP+va5jqNIDlljB6tExy5n3s7t6KK6g5j TZgVqrZ3+ms= -----END CERTIFICATE----- key_pairs: create_keypair_template: - name: ou value: k8s - name: o value: Tremolo Security - name: l value: Alexandria - name: st value: Virginia - name: c value: US keys: - name: unison-tls tls_secret_name: unison-tls-secret import_into_ks: keypair create_data: sign_by_k8s_ca: false server_name: test-openunison.openunison.svc.cluster.local subject_alternative_names: [] key_size: 2048 ca_cert: true - name: unison-ca tls_secret_name: ou-tls-certificate import_into_ks: certificate create_data: sign_by_k8s_ca: false server_name: test.apps.mydomain.com subject_alternative_names: [] key_size: 2048 ca_cert: false
hostshosts部分告知Operator在Kubernetes中创建哪些Ingress对象或在OpenShift中创建哪些Route。每个主机的主机名存储在环境密钥中,以便在OpenUnison配置中使用。在Kubernetes上,单个Ingress对象可包含多个主机名;在OpenShift上,每个Route只能有一个主机名。在Kubernetes上,需指定用于Ingress对象的密钥对名称。
secret_data此部分列出source_secret中应导入到OpenUnison环境密钥的data元素。
non_secret_data使用此部分定义不被视为机密的参数,例如环境参数、主机名等。切勿在此部分存储密码。
openunison_network_configurationOpenUnison的网络配置,通常可直接使用默认值。
key_store此部分定义OpenUnison使用的密钥库内容,包含以下子部分:
static_keys
OpenUnison广泛使用静态AES-256密钥。此部分定义要创建的密钥。列出的每个密钥都会添加到存储这些密钥的Secret中。当version更改时,Operator将生成新密钥并添加到密钥库。
trusted_certificates
此列表中的每个证书都会作为受信任证书添加到密钥库,例如需要信任的远程LDAPS服务证书。
key_pairs
OpenUnison Operator可以生成自签名证书或包含存储在Kubernetes中的TLS密钥对作为Secret。
create_keypair_template
此部分定义生成的密钥对主题的组成部分(主机名除外)。
keys
列出的每个密钥要么从tls_secret_name指定的Secret导入(如果存在),要么生成并存储在tls_secret_name中。生成证书时为自签名,主题基于create_data部分生成。生成的证书将使用server_name作为主题,并生成包含server_name的主题备用名称列表。
OpenUnison Operator将使用OpenShift原生对象部署到OpenShift。如果Operator部署在OpenShift上,image选项将被忽略,而是使用openshift部分驱动Source-to-Image流程。
以下是在OpenShift中启动仅包含测试用户的OpenUnison实例的简单OpenUnison CR示例:
yamlapiVersion: openunison.tremolo.io/v1 kind: OpenUnison metadata: name: test-openunison namespace: openunison spec: openshift: git: repo: '[***] branch: master dir: / builder_image: registry.connect.redhat.com/tremolosecurity/openunison-s2i-10 replicas: 1 enable_activemq: false dest_secret: openunison source_secret: openunison-secrets-source hosts: - names: - name: test.apps.mydomain.com env_var: OU_HOST ingress_name: openunison secret_data: - unisonKeystorePassword - TEST_USER_PASSWORD - REG_CRED_PASSWORD non_secret_data: - name: REG_CRED_USER value: rh_user - name: TEST_USER_NAME value: testuser - name: MYVD_CONFIG_PATH value: WEB-INF/myvd.conf - name: unisonKeystorePath value: /etc/openunison/unisonKeyStore.p12 openunison_network_configuration: open_port: 8080 open_external_port: 80 secure_port: 8443 secure_external_port: 443 secure_key_alias: unison-tls force_to_secure: true activemq_dir: /tmp/amq quartz_dir: /tmp/quartz client_auth: none allowed_client_names: [] ciphers: - TLS_RSA_WITH_RC4_128_SHA - TLS_RSA_WITH_AES_128_CBC_SHA - TLS_RSA_WITH_AES_256_CBC_SHA - TLS_RSA_WITH_3DES_EDE_CBC_SHA - TLS_RSA_WITH_AES_128_CBC_SHA256 - TLS_RSA_WITH_AES_256_CBC_SHA256 path_to_deployment: /usr/local/openunison/work path_to_env_file: /etc/openunison/ou.env key_store: static_keys: - name: session-unison version: 1 trusted_certificates: [] key_pairs: create_keypair_template: - name: ou value: k8s - name: o value: Tremolo Security - name: l value: Alexandria - name: st value: Virginia - name: c value: US keys: - name: unison-tls tls_secret_name: unison-tls-secret import_into_ks: keypair create_data: sign_by_k8s_ca: false server_name: test-openunison.openunison.svc.cluster.local subject_alternative_names: [] key_size: 2048 ca_cert: true
openshift此部分特定于OpenShift部署(3.x和4.x),通过Source-to-Image系统控制OpenUnison容器的构建过程。git部分告知构建器从何处获取OpenUnison源代码,builder_image指向要使用的s2i镜像。此处指向Red Hat认证镜像,上游CentOS版本可从tremolosecurity/openunisons2idocker:latest获取。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务