9.6. HTTP/2 리스너를 사용하여 TLS 종료 로드 밸런서 생성


TLS 종료 HTTPS 로드 밸런서를 사용하면 CPU 집약적인 암호화 작업을 로드 밸런서에 오프로드하고 로드 밸런서에서 계층 7 검사와 같은 고급 기능을 사용하도록 허용합니다. HTTP/2 리스너를 추가하면 HTTP/2 프로토콜을 활용하여 페이지를 더 빠르게 로드하여 성능을 향상시킬 수 있습니다. 로드 밸런서는 ALPN(Application-Layer Protocol Negotiation) TLS 확장을 사용하여 HTTP/2를 클라이언트와 협상합니다.

로드 밸런싱 서비스(octavia)는 엔드 투 엔드 HTTP/2 트래픽을 지원하므로 요청이 로드 밸런서에서 응답이 반환될 때까지 요청이 리스너에 도달하는 지점에서 HAProxy에서 HTTP2 트래픽을 번역하지 않습니다. 엔드 투 엔드 HTTP/2 트래픽을 달성하려면 백엔드 재암호화가 있는 HTTP 풀: HTTPS 트래픽을 위해 구성된 보안 포트 및 웹 애플리케이션에서 수신 대기하는 풀 멤버가 있어야 합니다.

백엔드 재암호화 없이 HTTP/2 트래픽을 HTTP 풀로 보낼 수 있습니다. 이 경우 HAProxy는 풀에 도달하기 전에 트래픽을 변환하고, 응답이 로드 밸런서에서 반환되기 전에 HTTP/2로 다시 변환됩니다.

백엔드 멤버를 계속 사용할 수 있도록 상태 모니터를 생성하는 것이 좋습니다.

참고

현재 로드 밸런싱 서비스는 HTTP/2 리스너를 사용하는 TLS 종료 로드 밸런서에 대한 상태 모니터링을 지원하지 않습니다.

사전 요구 사항

  • TLS 공개 키 암호화는 다음과 같은 특성으로 구성됩니다.

    • TLS 인증서, 키 및 중간 인증서 체인은 로드 밸런서 VIP 주소에 할당된 DNS 이름의 외부 CA(인증 기관)에서 가져옵니다(예: www.example.com ).
    • 인증서, 키 및 중간 인증서 체인은 현재 디렉터리에 별도의 파일에 있습니다.
    • 키와 인증서는 PEM으로 인코딩됩니다.
    • 중간 인증서 체인에는 PEM 인코딩 및 연결된 여러 인증서가 포함되어 있습니다.
  • 키 관리자 서비스(barbican)를 사용하도록 로드 밸런싱 서비스(octavia)를 구성해야 합니다. 자세한 내용은 키 관리자 서비스 가이드를 사용하여 시크릿 관리를 참조하십시오.

절차

  1. 키(server.key), 인증서(server.crt) 및 중간 인증서 체인(ca-chain.crt)을 단일 PKCS12 파일(server.p12)로 결합합니다.

    참고

    controlPlane 내부의 값은 이 절차의 예제 명령에 사용되는 샘플 값입니다. 이러한 샘플 값을 사이트에 적합한 값으로 바꿉니다.

    중요

    PKCS12 파일을 생성할 때 암호를 사용하지 마십시오.

    예제

    이 예에서는 PKCS12 파일이 암호 없이 생성됩니다.

    $ openssl pkcs12 -export -inkey server.key -in server.crt \
    -certfile ca-chain.crt -passout pass: -out server.p12
  2. 자격 증명 파일을 가져옵니다.

    예제
    $ source ~/overcloudrc
  3. Key Manager 서비스를 사용하여 PKCS12 파일의 시크릿 리소스(tls_secret1)를 생성합니다.

    예제
    $ openstack secret store --name='tls_secret1' \
    -t 'application/octet-stream' -e 'base64' \
    --payload="$(base64 < server.p12)"
  4. 공용 서브넷(public_subnet)에 로드 밸런서(lb1)를 만듭니다.

    예제
    $ openstack loadbalancer create --name lb1 --vip-subnet-id \
    public_subnet --wait
  5. TERMINATED_HTTPS 리스너(listener1)를 생성하고 다음을 수행합니다.

    • 시크릿 리소스(tls_secret1)를 리스너의 기본 TLS 컨테이너로 참조합니다.
    • ALPN 프로토콜(h2)을 설정합니다.
    • 클라이언트가 HTTP/2(http/1.1)를 지원하지 않는 경우 대체 프로토콜을 설정합니다.

      예제
      $ openstack loadbalancer listener create --name listener1 \
      --protocol-port 443 --protocol TERMINATED_HTTPS --alpn-protocol h2 \
      --alpn-protocol http/1.1 --default-tls-container=\
      $(openstack secret list | awk '/ tls_secret1 / {print $2}') lb1 --wait
  6. 풀(pool1)을 만들고 리스너의 기본 풀로 설정합니다.

    예제

    이 예제의 명령은 TCP 포트 80에서 웹 애플리케이션으로 구성된 HTTP 애플리케이션을 호스팅하는 백엔드 서버를 포함하는 HTTP 풀을 생성합니다.

    $ openstack loadbalancer pool create --name pool1 \
    --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --wait
  7. 백엔드 서버에 연결하는 풀(pool1)에 상태 모니터(healthmon1) 유형을 만듭니다.

    상태 점검이 권장되지만 필수는 아닙니다. 상태 모니터가 정의되지 않은 경우 멤버 서버는 ONLINE 으로 간주됩니다.

    예제
    $ openstack loadbalancer healthmonitor create --name healthmon1 \
    --delay 15  --max-retries 4 --timeout 10 --type TCP pool1 --wait
  8. 프라이빗 서브넷(private_subnet)의 HTTP 백엔드 서버( 192.0.2.10 및 192.0.2.11)를 풀에 추가합니다.

    예제

    이 예에서 백엔드 서버 192.0.2.10192.0.2.11 은 각각 member1member2 로 이름이 지정됩니다.

    $ openstack loadbalancer member create --name member1 --subnet-id \
    private_subnet --address 192.0.2.10 --protocol-port 80 pool1 --wait
    
    $ openstack loadbalancer member create --name member2 --subnet-id \
    private_subnet --address 192.0.2.11 --protocol-port 80 pool1 --wait

검증

  1. 로드 밸런서(lb1) 설정을 보고 확인합니다.

    예제
    $ openstack loadbalancer status show lb1
    샘플 출력
    {
        "loadbalancer": {
            "id": "936dad29-4c3f-4f24-84a8-c0e6f10ed810",
            "name": "lb1",
            "operating_status": "ONLINE",
            "provisioning_status": "ACTIVE",
            "listeners": [
                {
                    "id": "708b82c6-8a6b-4ec1-ae53-e619769821d4",
                    "name": "listener1",
                    "operating_status": "ONLINE",
                    "provisioning_status": "ACTIVE",
                    "pools": [
                        {
                            "id": "5ad7c678-23af-4422-8edb-ac3880bd888b",
                            "name": "pool1",
                            "provisioning_status": "ACTIVE",
                            "operating_status": "ONLINE",
                            "health_monitor": {
                                "id": "4ad786ef-6661-4e31-a325-eca07b2b3dd1",
                                "name": "healthmon1",
                                "type": "TCP",
                                "provisioning_status": "ACTIVE",
                                "operating_status": "ONLINE"
                            },
                            "members": [
                                {
                                    "id": "facca0d3-61a7-4b46-85e8-da6994883647",
                                    "name": "member1",
                                    "operating_status": "ONLINE",
                                    "provisioning_status": "ACTIVE",
                                    "address": "192.0.2.10",
                                    "protocol_port": 80
                                },
                                {
                                    "id": "2b0d9e0b-8e0c-48b8-aa57-90b2fde2eae2",
                                    "name": "member2",
                                    "operating_status": "ONLINE",
                                    "provisioning_status": "ACTIVE",
                                    "address": "192.0.2.11",
                                    "protocol_port": 80
                                }
    ...
  2. 상태 모니터가 존재하고 제대로 작동하는 경우 각 멤버의 상태를 확인할 수 있습니다.

    예제
    $ openstack loadbalancer member show pool1 member1
    샘플 출력

    작업 멤버(member1)에는 operating_status 에 대한 ONLINE 값이 있습니다.

    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | address             | 192.0.2.10                           |
    | admin_state_up      | True                                 |
    | created_at          | 2023-11-16T20:08:01                  |
    | id                  | facca0d3-61a7-4b46-85e8-da6994883647 |
    | name                | member1                              |
    | operating_status    | ONLINE                               |
    | project_id          | 9b29c91f67314bd09eda9018616851cf     |
    | protocol_port       | 80                                   |
    | provisioning_status | ACTIVE                               |
    | subnet_id           | 3b459c95-64d2-4cfa-b348-01aacc4b3fa9 |
    | updated_at          | 2023-11-16T20:08:42                  |
    | weight              | 1                                    |
    | monitor_port        | None                                 |
    | monitor_address     | None                                 |
    | backup              | False                                |
    | tags                |                                      |
    +---------------------+--------------------------------------+
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동