157 lines
6.9 KiB
Plaintext
157 lines
6.9 KiB
Plaintext
---
|
|
title: Preparing our low side
|
|
exercise: 2
|
|
date: '2023-12-18'
|
|
tags: ['openshift','containers','kubernetes','disconnected']
|
|
draft: false
|
|
authors: ['default']
|
|
summary: "Downloading content and tooling for sneaker ops 💾"
|
|
---
|
|
|
|
A disconnected OpenShift installation begins with downloading content and tooling to a prep system that has outbound access to the Internet. This server resides in an environment commonly referred to as the **Low side** due to its low security profile.
|
|
|
|
In this exercise we will be creating a new [AWS ec2 instance](https://aws.amazon.com/ec2) in our **Low side** that we will carry out all our preparation activities on.
|
|
|
|
|
|
## 2.1 - Creating a security group
|
|
|
|
We'll start by creating an [AWS security group](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) and collecting its ID.
|
|
|
|
We're going to use this shortly for the **Low side** prep system, and later on in the workshop for the **High side** bastion server.
|
|
|
|
Copy the commands below into your web terminal:
|
|
|
|
```bash
|
|
# Obtain vpc id
|
|
VPC_ID=$(aws ec2 describe-vpcs | jq '.Vpcs[] | select(.Tags[].Value=="disco").VpcId' -r)
|
|
echo "Virtual private cloud id is: ${VPC_ID}"
|
|
|
|
# Obtain first public subnet id
|
|
PUBLIC_SUBNET=$(aws ec2 describe-subnets | jq '.Subnets[] | select(.Tags[].Value=="Public Subnet - disco").SubnetId' -r)
|
|
|
|
# Create security group
|
|
aws ec2 create-security-group --group-name disco-sg --description disco-sg --vpc-id ${VPC_ID} --tag-specifications "ResourceType=security-group,Tags=[{Key=Name,Value=disco-sg}]"
|
|
|
|
# Store security group id
|
|
SG_ID=$(aws ec2 describe-security-groups --filters "Name=tag:Name,Values=disco-sg" | jq -r '.SecurityGroups[0].GroupId')
|
|
echo "Security group id is: ${SG_ID}"
|
|
```
|
|
|
|
<Zoom>
|
|
| |
|
|
|:-----------------------------------------------------------------------------:|
|
|
| *Creating aws ec2 security group* |
|
|
</Zoom>
|
|
|
|
|
|
## 2.2 - Opening ssh port ingress
|
|
|
|
We will want to login to our soon to be created **Low side** aws ec2 instance remotely via `ssh` so let's enable ingress on port `22` for this security group now:
|
|
|
|
> Note: We're going to allow traffic from all sources for simplicity (`0.0.0.0/0`), but this is likely to be more restrictive in real world environments:
|
|
|
|
```bash
|
|
aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 22 --cidr 0.0.0.0/0
|
|
```
|
|
|
|
<Zoom>
|
|
| |
|
|
|:-----------------------------------------------------------------------------:|
|
|
| *Opening ssh port ingress* |
|
|
</Zoom>
|
|
|
|
|
|
## 2.3 - Create prep system instance
|
|
|
|
Ready to launch! 🚀 We'll use the `t3.micro` instance type, which offers `1GiB` of RAM and `2` vCPUs, along with a `50GiB` storage volume to ensure we have enough storage for mirrored content:
|
|
|
|
> Note: As mentioned in [OpenShift documentation](https://access.redhat.com/documentation/en-us/openshift_container_platform/4.14/html/installing/disconnected-installation-mirroring) about 12 GB of storage space is required for OpenShift Container Platform 4.14 release images, or additionally about 358 GB for OpenShift Container Platform 4.14 release images and all OpenShift Container Platform 4.14 Red Hat Operator images.
|
|
|
|
Run the command below in your web terminal to launch the instance. We will specify an Amazon Machine Image (AMI) to use for our prep system which for this lab will be the [Marketplace AMI for RHEL 8](https://access.redhat.com/solutions/15356#us_east_2) in `us-east-2`.
|
|
|
|
```bash
|
|
aws ec2 run-instances --image-id "ami-092b43193629811af" \
|
|
--count 1 --instance-type t3.micro \
|
|
--key-name disco-key \
|
|
--security-group-ids $SG_ID \
|
|
--subnet-id $PUBLIC_SUBNET \
|
|
--associate-public-ip-address \
|
|
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=disco-prep-system}]" \
|
|
--block-device-mappings "DeviceName=/dev/sdh,Ebs={VolumeSize=50}"
|
|
```
|
|
|
|
<Zoom>
|
|
| |
|
|
|:-----------------------------------------------------------------------------:|
|
|
| *Launching a prep rhel8 ec2 instance* |
|
|
</Zoom>
|
|
|
|
|
|
## 2.4 - Downloading tools
|
|
|
|
Now that our prep system is up, let's `ssh` into it and download the content we'll need to support our install on the high side.
|
|
|
|
Copy the commands below into your web terminal. Let's start by retrieving the IP for the new ec2 instance and then connecting via `ssh`:
|
|
|
|
> Note: If your `ssh` command times out here, your prep system is likely still booting up. Give it a minute and try again.
|
|
|
|
```bash
|
|
PREP_SYSTEM_IP=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=disco-prep-system" | jq -r '.Reservations[0].Instances[0].PublicIpAddress')
|
|
echo $PREP_SYSTEM_IP
|
|
|
|
ssh -i ~/disco_key ec2-user@$PREP_SYSTEM_IP
|
|
```
|
|
|
|
|
|
For the purposes of this workshop, rather than downloading mirror content to a USB drive as we would likely do in a real SneakerOps situation, we will instead be saving content to an EBS volume which will be mounted to our prep system on the **Low side** and then subsequently to our bastion system on the **High side**.
|
|
|
|
Once your prep system has booted let's mount the EBS volume we attached so we can start downloading content. Copy the commands below into your web terminal:
|
|
|
|
```bash
|
|
sudo mkfs -t xfs /dev/nvme1n1
|
|
sudo mkdir /mnt/high-side
|
|
sudo mount /dev/nvme1n1 /mnt/high-side
|
|
sudo chown ec2-user:ec2-user /mnt/high-side
|
|
cd /mnt/high-side
|
|
```
|
|
|
|
With our mount in place let's grab the tools we'll need for the bastion server - we'll use some of them on the prep system too. Life's good on the low side; we can download these from the internet and tuck them into our high side gift basket at `/mnt/high-side`.
|
|
|
|
There are four tools we need, copy the commands for each into your web terminal to download each one:
|
|
|
|
1. `oc` OpenShift cli
|
|
|
|
```bash
|
|
curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-client-linux.tar.gz -L -o oc.tar.gz
|
|
tar -xzf oc.tar.gz oc && rm -f oc.tar.gz
|
|
sudo cp oc /usr/local/bin/
|
|
```
|
|
|
|
2. `oc-mirror` oc plugin for mirorring release, operator, and helm content
|
|
|
|
```bash
|
|
curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/oc-mirror.tar.gz -L -o oc-mirror.tar.gz
|
|
tar -xzf oc-mirror.tar.gz && rm -f oc-mirror.tar.gz
|
|
chmod +x oc-mirror
|
|
sudo cp oc-mirror /usr/local/bin/
|
|
```
|
|
|
|
3. `mirror-registry` small-scale Quay registry designed for mirroring
|
|
|
|
```bash
|
|
curl https://mirror.openshift.com/pub/openshift-v4/clients/mirror-registry/latest/mirror-registry.tar.gz -L -o mirror-registry.tar.gz
|
|
tar -xzf mirror-registry.tar.gz
|
|
rm -f mirror-registry.tar.gz
|
|
```
|
|
|
|
4. `openshift-installer` The OpenShift installer cli
|
|
|
|
```bash
|
|
curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-install-linux.tar.gz -L -o openshift-installer.tar.gz
|
|
tar -xzf openshift-installer.tar.gz openshift-install
|
|
rm -f openshift-installer.tar.gz
|
|
```
|
|
|
|
|
|
|