Skip to content

Commit a0144b9

Browse files
committed
Merge branch 'main' into lpinne
2 parents 0841d0d + ebb1d8e commit a0144b9

32 files changed

Lines changed: 3428 additions & 154 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
MAIN="SLES4SAP-HANAonKVM-15SP7.adoc"
2+
3+
ADOC_TYPE="article"
4+
5+
ADOC_POST="yes"
6+
7+
ADOC_ATTRIBUTES="--attribute docdate=2026-05-26"
8+
9+
# stylesheets
10+
STYLEROOT=/usr/share/xml/docbook/stylesheet/sbp
11+
FALLBACK_STYLEROOT=/usr/share/xml/docbook/stylesheet/suse2022-ns
12+
13+
XSLTPARAM="--stringparam publishing.series=sbp"
14+
15+
#DRAFT=yes
16+
ROLE="sbp"
17+
#PROFROLE="sbp"
18+
19+
DOCBOOK5_RNG_URI="http://docbook.org/xml/5.2/rng/docbookxi.rnc"

adoc/SAP-EIC-General.adoc

Lines changed: 126 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ https://help.sap.com/docs/integration-suite?locale=en-US and search for the "Edg
88

99

1010
# tag::disclaimer-production-versions[]
11-
If you want to use different versions of {slem} or {slm}, {rancher}, {rke}, or {lh}, make sure to check the support matrix for the related solutions you want to use:
11+
To use different versions of {slem} or {slm}, {rancher}, {rke}, or {lh}, make sure to check the support matrix for the related solutions you want to use:
1212
https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/ +
1313
For {redis} and {pg}, make sure to pick versions compatible to {eic}, which can be found at https://me.sap.com/notes/3247839 . +
1414

@@ -21,7 +21,7 @@ For {redis} and {pg}, make sure to pick versions compatible to {eic}, which can
2121

2222
WARNING: We strongly advise against using self-signed certificates in production environments.
2323

24-
The first step is to create a certificate authority (hereinafter referred to as CA) with a key and certificate.
24+
The first step is to create a certificate authority (hereinafter called CA) with a key and certificate.
2525
The following excerpt provides an example of how to create a CA with a passphrase of your choice:
2626

2727
[source, bash]
@@ -30,7 +30,7 @@ openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out ro
3030
----
3131

3232
This will generate the files _rootCA.key_ and _rootCA.crt_.
33-
The server certificate requires a certificate-signing request (hereinafter referred to as CSR).
33+
The server certificate requires a certificate-signing request (hereinafter called CSR).
3434
The following excerpt shows how to create such a CSR:
3535

3636
[source, bash]
@@ -110,7 +110,7 @@ spec:
110110
selfSigned: {}
111111
----
112112

113-
Then create a Certificate Ressource for the CA called _my-ca-cert.yaml_:
113+
Then create a Certificate Resource for the CA called _my-ca-cert.yaml_:
114114
[source,yaml]
115115
----
116116
apiVersion: cert-manager.io/v1
@@ -195,12 +195,132 @@ To keep track of the deletion process, you can run:
195195
kubectl -n kube-system logs -l job-name=cleanup-job -f
196196
----
197197

198-
To verify the deletion was sucessfull, run the following commands. You should receive an empty output:
198+
To verify the deletion was successful, run the following commands. You should receive an empty output:
199199

200200
[source, bash]
201201
----
202202
kubectl create -f https://raw.githubusercontent.com/rancher/rancher-cleanup/refs/heads/main/deploy/verify.yaml
203203
kubectl -n kube-system logs -l job-name=verify-job -f | grep -v "is deprecated"
204204
----
205205

206-
# end::rancher-cleanup[]
206+
# end::rancher-cleanup[]
207+
208+
# tag::rancher-registries[]
209+
210+
[#rancherRegistries]
211+
212+
To avoid creating identical imagePullSecrets in multiple namespaces, you can also introduce a registry in your cluster configuration.
213+
This can be configured in the Cluster Configuration at the tab _Registries_ as shown below:
214+
215+
image::SAP-Edge-Registry-Config.png[title=Cluster Config Registry,scaledwidth=99%]
216+
217+
When opened, click _Show Advanced_ as displayed in the picture below:
218+
219+
image::SAP-Edge-Registry-Registries.png[title=Cluster Config Registry Advanced,scaledwidth=99%]
220+
221+
++++
222+
<?pdfpagebreak?>
223+
++++
224+
225+
Scroll to the very bottom and enter your registry FQDN, as shown below:
226+
227+
image::SAP-Edge-Registry-Add.png[title=Configure Registry at cluster config,scaledwidth=99%]
228+
229+
There's no need to start with http:// or https:// prefix, neither with the /project as a suffix.
230+
If you are using certificates from an unknown CA, make sure to enable *Skip TLS Verifications*.
231+
232+
# end::rancher-registries[]
233+
234+
# tag::legacyRestrictedAccess[]
235+
236+
[#legacyRestrictedAccess]
237+
238+
For Edge Integration Cell versions older than 8.41, you must manually prepare the cluster using the resources attached to **SAP Note 3618713**: https://me.sap.com/notes/3618713.
239+
240+
==== Applying the resources from SAP Note
241+
242+
1. Access **SAP Note 3618713** and download the `resources.zip` file.
243+
2. Follow the instructions in the **"Manual Setup Using Attached Resources"** section of the SAP Note to create the namespaces, Custom Resource Definitions (CRDs), and RBAC policies (Roles and RoleBindings) in your cluster.
244+
3. When the resources are successfully applied, return to this guide to complete the following steps.
245+
246+
==== Configuring ImagePullSecrets
247+
248+
Create the *imagePullSecret* in all newly created namespaces (except `edge-icell-secrets`). Refer to <<imagePullSecret>> for credential details and apply them to `edgelm`, `istio-gateways`, `edge-icell`, `edge-icell-services`, and `edge-icell-ela`.
249+
250+
Alternatively, run the following script to create the *imagePullSecret* in all required namespaces:
251+
252+
[source, bash]
253+
----
254+
NAMESPACES_INJECTION=("edgelm" "edge-icell" "edge-icell-services" "edge-icell-ela" "istio-gateways")
255+
for ns in "${NAMESPACES_INJECTION[@]}"; do
256+
echo "Creating imagePullSecret for namespace: $ns"
257+
kubectl create secret docker-registry application-collection -n $ns \
258+
--docker-server=dp.apps.rancher.io \
259+
--docker-username=<yourUser> \
260+
--docker-password=<yourPassword>
261+
sleep 1
262+
echo "---"
263+
done
264+
echo "Done"
265+
----
266+
267+
==== Granting user permissions
268+
269+
The manifests provided by SAP contain the necessary security policies, but they must be explicitly assigned to your restricted user. By associating these policies with your Rancher User ID, {elm} can securely manage the cluster using Rancher's centralized authentication.
270+
271+
Ensure you have created the restricted user in Rancher as described in <<createRestrictedUser>>. Then, create a file named `configuring_permissions.sh` and add the following validated script to grant the required permissions to your user:
272+
273+
[source, bash]
274+
----
275+
#!/bin/bash
276+
# configuring_permissions.sh
277+
USER_ID="$1"
278+
279+
# rolebindings for edgelm namespace
280+
kubectl patch rolebindings rb-edgelm-manage -n edgelm --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
281+
kubectl patch rolebindings rb-edgelm-admin -n edgelm --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
282+
283+
# clusterrolebinding for edgelm
284+
kubectl patch clusterrolebindings crb-edgelm-cluster-admin --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
285+
286+
# rolebindings for istio-gateways namespace
287+
kubectl patch rolebindings rb-edgelm-manage -n istio-gateways --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
288+
kubectl patch rolebindings rb-istio-gateways-admin -n istio-gateways --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
289+
290+
# rolebindings for edge-icell namespace
291+
kubectl patch rolebindings rb-edgelm-manage -n edge-icell --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
292+
kubectl patch rolebindings rb-admin -n edge-icell --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
293+
kubectl patch rolebindings rb-app-admin -n edge-icell --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
294+
295+
# rolebindings for edge-icell-ela namespace
296+
kubectl patch rolebindings rb-edgelm-manage -n edge-icell-ela --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
297+
kubectl patch rolebindings rb-admin -n edge-icell-ela --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
298+
299+
# rolebindings for edge-icell-secrets namespace
300+
kubectl patch rolebindings rb-edgelm-manage -n edge-icell-secrets --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
301+
kubectl patch rolebindings rb-admin -n edge-icell-secrets --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
302+
303+
# rolebindings for edge-icell-services namespace
304+
kubectl patch rolebindings rb-edgelm-manage -n edge-icell-services --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
305+
kubectl patch rolebindings rb-admin -n edge-icell-services --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
306+
kubectl patch rolebindings rb-app-admin -n edge-icell-services --type=json -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "'$USER_ID'"}}]'
307+
308+
echo "Done"
309+
----
310+
311+
Make the script executable and run it, replacing `<USER_ID>` with your actual restricted user ID:
312+
313+
[source, bash]
314+
----
315+
chmod +x configuring_permissions.sh
316+
./configuring_permissions.sh <USER_ID>
317+
----
318+
319+
[#raLegacyKubeconfig]
320+
==== Generating and downloading the kubeconfig file
321+
322+
The process for downloading the restricted kubeconfig file from the Rancher UI is identical for all {eic} versions.
323+
324+
Refer to <<raDownloadKubeconfig>> for the detailed steps and visual guides. When downloaded, you can provide this file to the {elm} UI to finish initializing your Edge Node.
325+
326+
# end::legacyRestrictedAccess[]

adoc/SAP-EIC-HANA.adoc

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
2+
This chapter describes a basic example of how to use {hana} with {eic}.
3+
It will *NOT* instruct how to set up {hana} or high availability for {hana}.
4+
5+
TIP: For more information around high availability, refer to
6+
link:https://documentation.suse.com/sbp/high-availability/[SUSE's best practices guides]
7+
8+
TIP: If you are looking for automated deployments of {hana}, there are Ansible scripts available at https://github.com/sap-linuxlab/ansible.playbooks_for_sap
9+
10+
++++
11+
<?pdfpagebreak?>
12+
++++
13+
14+
== Architecture overview
15+
16+
IMPORTANT: HANA is supposed to run in a side-by-side approach with the {eic} Kubernetes cluster. {hana} is not part of that Kubernetes cluster. The picture below shows the side-by-side installation from an architectural point of view.
17+
18+
image::SAP-EIC-HANA.svg[title=HANA architecture overview,scaledwidth=99%,opts=inline,Embedded]
19+
20+
21+
== Prepare {hana}
22+
23+
If you are planning to use a shared {hana} instance for {eic} with other workloads, itis recommended to create a dedicated tenant database, user and schema for {eic}.
24+
25+
To create a new tenant database log in to your installed {hana}.
26+
An example login command looks like:
27+
28+
[source, bash]
29+
----
30+
hdbsql -i 00 -d SYSTEMDB -u SYSTEM -p <password>
31+
----
32+
33+
When logged in, run the following command to create a new tenant database:
34+
35+
[source, sql]
36+
----
37+
CREATE DATABASE EICDB SYSTEM USER PASSWORD "SuperSecret123";
38+
----
39+
40+
This will create a new tenant database _EICDB_ and sets the database password to _"SuperSecret123"_
41+
After creation, you will need to login to the newly created database to create a new user and schema.
42+
43+
Similar to the previous log in, the our example uses now the newly created _EICDB_ and the password from the command above:
44+
45+
[source, bash]
46+
----
47+
hdbsql -i 00 -d EICDB -u SYSTEM -p "SuperSecret123"
48+
----
49+
50+
After now being logged into the dedicated tenant database, you can now create the new user and the schema.
51+
In the following example we'll create a user named _EICUSER_ with the password _YourPassword123_ and the related schema _EIC_:
52+
53+
[source, sql]
54+
----
55+
CREATE USER EICUSER PASSWORD "YourPassword123" NO FORCE_FIRST_PASSWORD_CHANGE;
56+
GRANT DATA ADMIN TO EICUSER;
57+
CREATE SCHEMA EIC;
58+
----
59+
60+
// GRANT SELECT,INSERT,UPDATE,DELETE ON SCHEMA "EIC" TO "EICUSER";
61+
62+
[#gatherHANAdbPort]
63+
Get the sql port for the newly created tenant database:
64+
65+
[source, sql]
66+
----
67+
SELECT SQL_PORT FROM SYS.M_SERVICES WHERE SERVICE_NAME='indexserver';
68+
----
69+
70+
[#gatherHANArootCert]
71+
== Gather the HANA DB root cert
72+
73+
The HANA DB root cert is required to deploy {eic} with {hana} as the datastore or database.
74+
The certificate is stored locally on your HANA node and can be found in the $SECUDIR.
75+
Typically the name of the certificate is like:
76+
77+
[source, text]
78+
----
79+
clientpki_<SID>.cer
80+
----
81+
82+
The file is located on the {hana} node and you can access is in the given directory.
83+
The hdbadm user usually has the SECUDIR variable set so you can easily change into that directory like:
84+
85+
[source, bash]
86+
----
87+
cd $SECUDIR
88+
----
89+
90+
++++
91+
<?pdfpagebreak?>
92+
++++
93+
94+
== Enter input
95+
96+
When deploying {eic} with HANA, you will be prompted to enter the relevant data.
97+
98+
The _HANA DB Node_ requires the URL and port of your {hana} tenant database.
99+
You can get the port as described in the chapter above <<gatherHANAdbPort>>.
100+
101+
The _HANA DB Name_ is the name of the tenant database to use. +
102+
For the _HANA DB Schema_ you can enter the name of the schema to be used. +
103+
The _HANA DB Username_ is the name of the user, used to connect to {hana}. +
104+
The _HANA DB Password_ is the password for the given user.
105+
106+
If you followed our example above, the values are:
107+
108+
[source, text]
109+
----
110+
HANA DB Node: <hanaURL>:<portNumber>
111+
HANA DB Name: EICDB
112+
HANA DB Schema: EIC
113+
HANA DB Username: EICUSER
114+
HANA DB Password: YourPassword123
115+
----

0 commit comments

Comments
 (0)