Dieser Inhalt ist in der von Ihnen ausgewählten Sprache nicht verfügbar.
Chapter 9. Creating secure HTTP load balancers
You can create various types of load balancers to manage secure HTTP (HTTPS) network traffic.
- Section 9.1, “About non-terminated HTTPS load balancers”
- Section 9.2, “Creating a non-terminated HTTPS load balancer”
- Section 9.3, “About TLS-terminated HTTPS load balancers”
- Section 9.4, “Creating a TLS-terminated HTTPS load balancer”
- Section 9.5, “Creating a TLS-terminated HTTPS load balancer with SNI”
- Section 9.6, “Creating HTTP and TLS-terminated HTTPS load balancing on the same IP and back-end”
9.1. About non-terminated HTTPS load balancers Link kopierenLink in die Zwischenablage kopiert!
A non-terminated HTTPS load balancer acts effectively like a generic TCP load balancer: the load balancer forwards the raw TCP traffic from the web client to the back-end servers where the HTTPS connection is terminated with the web clients. While non-terminated HTTPS load balancers do not support advanced load balancer features like Layer 7 functionality, they do lower load balancer resource utilization by managing the certificates and keys themselves.
9.2. Creating a non-terminated HTTPS load balancer Link kopierenLink in die Zwischenablage kopiert!
If your application requires HTTPS traffic to terminate on the back-end member servers, typically called HTTPS pass through, you can use the HTTPS protocol for your load balancer listeners.
Prerequisites
- A private subnet that contains back-end servers that host HTTPS applications that are configured with a TLS-encrypted web application on TCP port 443.
-
The back-end servers are configured with a health check at the URL path
/
. - A shared external (public) subnet that you can reach from the internet.
Procedure
Source your credentials file.
Example
source ~/overcloudrc
$ source ~/overcloudrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a load balancer (
lb1
) on a public subnet (public_subnet
):NoteValues inside parentheses are sample values that are used in the example commands in this procedure. Substitute these sample values with ones that are appropriate for your site.
Example
openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
$ openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Monitor the state of the load balancer.
Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Before going to the next step, ensure that the
provisioning_status
isACTIVE
. Create a listener (
listener1
) on a port (443
).Example
openstack loadbalancer listener create --name listener1 --protocol HTTPS --protocol-port 443 lb1
$ openstack loadbalancer listener create --name listener1 --protocol HTTPS --protocol-port 443 lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the listener default pool (
pool1
).Example
openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTPS
$ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTPS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a health monitor on the pool (
pool1
) that connects to the back-end servers and tests the path (/
).Example
openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type TLS-HELLO --url-path / pool1
$ openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type TLS-HELLO --url-path / pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add load balancer members (
192.0.2.10
and192.0.2.11
) on the private subnet (private_subnet
) to the default pool.Example
openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 443 pool1 openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 443 pool1
$ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 443 pool1 $ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 443 pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
View and verify the load balancer (
lb1
) settings.Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow When a health monitor is present and functioning properly, you can check the status of each member.
A working member (
b85c807e-4d7c-4cbd-b725-5e8afddf80d2
) has anONLINE
value for itsoperating_status
.Example
openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
$ openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. About TLS-terminated HTTPS load balancers Link kopierenLink in die Zwischenablage kopiert!
When a TLS-terminated HTTPS load balancer is implemented, web clients communicate with the load balancer over Transport Layer Security (TLS) protocols. The load balancer terminates the TLS session and forwards the decrypted requests to the back-end servers. When you terminate the TLS session on the load balancer, you offload the CPU-intensive encryption operations to the load balancer, and allow the load balancer to use advanced features such as Layer 7 inspection.
9.4. Creating a TLS-terminated HTTPS load balancer Link kopierenLink in die Zwischenablage kopiert!
When you use TLS-terminated HTTPS load balancers, you offload the CPU-intensive encryption operations to the load balancer, and allow the load balancer to use advanced features such as Layer 7 inspection. It is a best practice to also create a health monitor to ensure that your back-end members remain available.
Prerequisites
- A private subnet that contains back-end servers that host non-secure HTTP applications on TCP port 80.
-
The back-end servers are configured with a health check at the URL path
/
. - A shared external (public) subnet that you can reach from the internet.
TLS public-key cryptography is configured with the following characteristics:
-
A TLS certificate, key, and intermediate certificate chain is obtained from an external certificate authority (CA) for the DNS name that is assigned to the load balancer VIP address, for example,
www.example.com
. - The certificate, key, and intermediate certificate chain reside in separate files in the current directory.
- The key and certificate are PEM-encoded.
- The key is not encrypted with a passphrase.
- The intermediate certificate chain contains multiple certificates that are PEM-encoded and concatenated together.
-
A TLS certificate, key, and intermediate certificate chain is obtained from an external certificate authority (CA) for the DNS name that is assigned to the load balancer VIP address, for example,
- You must configure the Load-balancing service (octavia) to use the Key Manager service (barbican). For more information, see the Manage Secrets with OpenStack Key Manager guide.
Procedure
Combine the key (
server.key
), certificate (server.crt
), and intermediate certificate chain (ca-chain.crt
) into a single PKCS12 file (server.p12
).NoteValues inside parentheses are sample values that are used in the example commands in this procedure. Substitute these sample values with ones that are appropriate for your site.
Example
openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12
$ openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteThe following procedure does not work if you password protect the PKCS12 file.
Source your credentials file.
Example
source ~/overcloudrc
$ source ~/overcloudrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Use the Key Manager service to create a secret resource (
tls_secret1
) for the PKCS12 file.Example
openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)"
$ openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a load balancer (
lb1
) on the public subnet (public_subnet
).Example
openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
$ openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Monitor the state of the load balancer.
Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Before going to the next step, ensure that the
provisioning_status
isACTIVE
. Create a
TERMINATED_HTTPS
listener (listener1
), and reference the secret resource as the default TLS container for the listener.Example
openstack loadbalancer listener create --protocol-port 443 --protocol TERMINATED_HTTPS --name listener1 --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
$ openstack loadbalancer listener create --protocol-port 443 --protocol TERMINATED_HTTPS --name listener1 --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a pool (
pool1
) and make it the default pool for the listener.Example
openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
$ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a health monitor on the pool (
pool1
) that connects to the back-end servers and tests the path (/
).Example
openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
$ openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add the non-secure HTTP back-end servers (
192.0.2.10
and192.0.2.11
) on the private subnet (private_subnet
) to the pool.Example
openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1 openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1
$ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1 $ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
View and verify the load balancer (
lb1
) settings.Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow When a health monitor is present and functioning properly, you can check the status of each member.
A working member (
b85c807e-4d7c-4cbd-b725-5e8afddf80d2
) has anONLINE
value for itsoperating_status
.Example
openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
$ openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. Creating a TLS-terminated HTTPS load balancer with SNI Link kopierenLink in die Zwischenablage kopiert!
For TLS-terminated HTTPS load balancers that employ Server Name Indication (SNI) technology, a single listener can contain multiple TLS certificates and enable the load balancer to know which certificate to present when it uses a shared IP. It is a best practice to also create a health monitor to ensure that your back-end members remain available.
Prerequisites
- A private subnet that contains back-end servers that host non-secure HTTP applications on TCP port 80.
-
The back-end servers are configured with a health check at the URL path
/
. - A shared external (public) subnet that you can reach from the internet.
TLS public-key cryptography is configured with the following characteristics:
-
Multiple TLS certificates, keys, and intermediate certificate chains have been obtained from an external certificate authority (CA) for the DNS names assigned to the load balancer VIP address, for example,
www.example.com
andwww2.example.com
. - The keys and certificates are PEM-encoded.
- The keys are not encrypted with passphrases.
-
Multiple TLS certificates, keys, and intermediate certificate chains have been obtained from an external certificate authority (CA) for the DNS names assigned to the load balancer VIP address, for example,
- You must configure the Load-balancing service (octavia) to use the Key Manager service (barbican). For more information, see the Manage Secrets with OpenStack Key Manager guide.
Procedure
For each of the TLS certificates in the SNI list, combine the key (
server.key
), certificate (server.crt
), and intermediate certificate chain (ca-chain.crt
) into a single PKCS12 file (server.p12
).In this example, you create two PKCS12 files (
server.p12
andserver2.p12
) one for each certificate (www.example.com
andwww2.example.com
).NoteValues inside parentheses are sample values that are used in the example commands in this procedure. Substitute these sample values with ones that are appropriate for your site.
openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12 openssl pkcs12 -export -inkey server2.key -in server2.crt -certfile ca-chain2.crt -passout pass: -out server2.p12
$ openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12 $ openssl pkcs12 -export -inkey server2.key -in server2.crt -certfile ca-chain2.crt -passout pass: -out server2.p12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Source your credentials file.
Example
source ~/overcloudrc
$ source ~/overcloudrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Use the Key Manager service to create secret resources (
tls_secret1
andtls_secret2
) for the PKCS12 file.openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)" openstack secret store --name='tls_secret2' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server2.p12)"
$ openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)" $ openstack secret store --name='tls_secret2' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server2.p12)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a load balancer (
lb1
) on the public subnet (public_subnet
).openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
$ openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Monitor the state of the load balancer.
Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Before going to the next step, ensure that the
provisioning_status
isACTIVE
. Create a TERMINATED_HTTPS listener (
listener1
), and use SNI to reference both the secret resources.(Reference
tls_secret1
as the default TLS container for the listener.)openstack loadbalancer listener create --protocol-port 443 \ --protocol TERMINATED_HTTPS --name listener1 \ --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') \ --sni-container-refs $(openstack secret list | awk '/ tls_secret1 / {print $2}') \ $(openstack secret list | awk '/ tls_secret2 / {print $2}') -- lb1
$ openstack loadbalancer listener create --protocol-port 443 \ --protocol TERMINATED_HTTPS --name listener1 \ --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') \ --sni-container-refs $(openstack secret list | awk '/ tls_secret1 / {print $2}') \ $(openstack secret list | awk '/ tls_secret2 / {print $2}') -- lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a pool (
pool1
) and make it the default pool for the listener.openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
$ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a health monitor on the pool (
pool1
) that connects to the back-end servers and tests the path (/
).Example
openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
$ openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add the non-secure HTTP back-end servers (
192.0.2.10
and192.0.2.11
) on the private subnet (private_subnet
) to the pool.openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1 openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1
$ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1 $ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
View and verify the load balancer (
lb1
) settings.Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow When a health monitor is present and functioning properly, you can check the status of each member.
A working member (
b85c807e-4d7c-4cbd-b725-5e8afddf80d2
) has anONLINE
value for itsoperating_status
.Example
openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
$ openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6. Creating HTTP and TLS-terminated HTTPS load balancing on the same IP and back-end Link kopierenLink in die Zwischenablage kopiert!
You can configure a non-secure listener and a TLS-terminated HTTPS listener on the same load balancer and the same IP address when you want to respond to web clients with the exact same content, regardless if the client is connected with a secure or non-secure HTTP protocol. It is a best practice to also create a health monitor to ensure that your back-end members remain available.
Prerequisites
- A private subnet that contains back-end servers that host non-secure HTTP applications on TCP port 80.
-
The back-end servers are configured with a health check at the URL path
/
. - A shared external (public) subnet that you can reach from the internet.
TLS public-key cryptography is configured with the following characteristics:
- A TLS certificate, key, and optional intermediate certificate chain have been obtained from an external certificate authority (CA) for the DNS name assigned to the load balancer VIP address (for example, www.example.com).
- The certificate, key, and intermediate certificate chain reside in separate files in the current directory.
- The key and certificate are PEM-encoded.
- The key is not encrypted with a passphrase.
- The intermediate certificate chain contains multiple certificates that are PEM-encoded and concatenated together.
- You have configured the Load-balancing service (octavia) to use the Key Manager service (barbican). For more information, see the Manage Secrets with OpenStack Key Manager guide.
- The non-secure HTTP listener is configured with the same pool as the HTTPS TLS-terminated load balancer.
Procedure
Combine the key (
server.key
), certificate (server.crt
), and intermediate certificate chain (ca-chain.crt
) into a single PKCS12 file (server.p12
).NoteValues inside parentheses are sample values that are used in the example commands in this procedure. Substitute these sample values with ones that are appropriate for your site.
openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12
$ openssl pkcs12 -export -inkey server.key -in server.crt -certfile ca-chain.crt -passout pass: -out server.p12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Source your credentials file.
Example
source ~/overcloudrc
$ source ~/overcloudrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Use the Key Manager service to create a secret resource (
tls_secret1
) for the PKCS12 file.openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)"
$ openstack secret store --name='tls_secret1' -t 'application/octet-stream' -e 'base64' --payload="$(base64 < server.p12)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a load balancer (
lb1
) on the public subnet (public_subnet
).openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
$ openstack loadbalancer create --name lb1 --vip-subnet-id public_subnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Monitor the state of the load balancer.
Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Before going to the next step, ensure that the
provisioning_status
isACTIVE
. Create a TERMINATED_HTTPS listener (
listener1
), and reference the secret resource as the default TLS container for the listener.openstack loadbalancer listener create --protocol-port 443 --protocol TERMINATED_HTTPS --name listener1 --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
$ openstack loadbalancer listener create --protocol-port 443 --protocol TERMINATED_HTTPS --name listener1 --default-tls-container=$(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a pool (
pool1
) and make it the default pool for the listener.openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
$ openstack loadbalancer pool create --name pool1 --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a health monitor on the pool (
pool1
) that connects to the back-end servers and tests the path (/
):Example
openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
$ openstack loadbalancer healthmonitor create --delay 15 --max-retries 4 --timeout 10 --type HTTP --url-path / pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add the non-secure HTTP back-end servers (
192.0.2.10
and192.0.2.11
) on the private subnet (private_subnet
) to the pool.openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1 openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1
$ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.10 --protocol-port 80 pool1 $ openstack loadbalancer member create --subnet-id private_subnet --address 192.0.2.11 --protocol-port 80 pool1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a non-secure, HTTP listener (
listener2
), and make its default pool, the same as the secure listener.openstack loadbalancer listener create --protocol-port 80 --protocol HTTP --name listener2 --default-pool pool1 lb1
$ openstack loadbalancer listener create --protocol-port 80 --protocol HTTP --name listener2 --default-pool pool1 lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
View and verify the load balancer (
lb1
) settings.Example
openstack loadbalancer show lb1
$ openstack loadbalancer show lb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow When a health monitor is present and functioning properly, you can check the status of each member.
A working member (
b85c807e-4d7c-4cbd-b725-5e8afddf80d2
) has anONLINE
value for itsoperating_status
.Example
openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
$ openstack loadbalancer member show pool1 b85c807e-4d7c-4cbd-b725-5e8afddf80d2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sample output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow