내 이전 기사 앞서 Autonomous Operator 1.2.0의 새로운 공용 연결 기능에 대해 개괄적으로 설명했습니다. 이는 의도적으로 추상적인 개요를 통해 사용자가 DDNS, TLS 및 레이어 3 네트워킹의 이점에 대해 알아가도록 유도하기 위한 것이었습니다.
사람에게 물고기를 주면 하루를 먹여 살린다. 사람에게 낚시를 가르치면 평생을 먹여 살린다.
여러분 모두 낚시하는 법을 배우기 위해 시간을 투자하셨기를 바랍니다! (또는 적어도 발을 담글 준비가 되셨겠죠.) 이 문서에서는 공용 인터넷에 안전하게 Couchbase 클러스터를 노출하기 위한 Operator 구성에 대한 실용적인 튜토리얼을 제공합니다.
이 기능을 사용하는 이유는 무엇인가요?
오늘날의 기술 스타트업은 기존 기업보다 클라우드에 더 중점을 두고 있습니다. 일부에서는 전통적인 기업이 프라이빗 데이터 센터의 방화벽 뒤에 데이터를 보호하는 등 고착화되어 있다고 주장하지만, 보안 관점에서 볼 때 이는 옳은 일입니다.
클라우드 노출의 증가는 더 큰 위험이지만 시간이 지남에 따라 우려가 줄어들고 있습니다. 무엇보다 클라우드는 민첩성과 혁신의 이점을 얻을 수 있는 무수한 문을 열어줍니다. 공용 인터넷을 통해 공공 서비스 제품을 연결하는 것은 큰 이점이며, NAT 경계 뒤에 숨어 있는 온프레미스 서비스에서는 쉽고 경제적으로 달성할 수 없는 이점입니다.
개인적으로 아주 좋아하는 한 가지 예는 서비스형 함수(FaaS)의 부상입니다. 함수는 자극에 반응하여 결과를 반환하는 수명이 짧은 작업(일반적으로 컨테이너 기반)입니다. 필요에 따라 생성되며 필요한 워크로드를 처리하기 위해 수평적으로 즉각적으로 자동 확장됩니다. 가상 또는 물리적 인프라를 설치하고 구성하는 데 시간을 낭비하지 않고도 지금 바로 퍼블릭 FaaS 서비스 상품을 사용할 수 있습니다. AWS Lambda는 여러분에게 친숙한 서비스 중 하나입니다.
순수하게 데이터만 처리하는 기능이 아니라면 일반적으로 데이터베이스 형태의 입력이 필요합니다. 이러한 FaaS 서비스는 공용 인터넷에서 작동하므로 공용 데이터베이스에 연결해야 합니다. 이러한 서비스 간에 비공개 VPN 터널을 설정하는 것은 어렵거나 불가능할 수 있습니다.
이러한 이유(상호 연결성, 단순성, 민첩성)로 인해 다음과 같은 옵션을 제공합니다. 공용 연결.
보안, 보안, 보안
퍼블릭 인터넷에 공개된 서비스는 악의적인 제3자 공격자의 면밀한 조사에 직면하게 됩니다. 인터넷은 개인 정보를 수집하고 악용하려는 시도로 가득 차 있습니다. 간단한 테스트로 UNIX 시스템을 인터넷에 연결해 보세요. 일반적인/도용된 사용자 이름 및 비밀번호 사전을 사용하여 시스템에 액세스하려는 시도로 SSH 로그가 상당히 빠르게 채워질 것입니다. 방화벽은 열린 포트를 검색하려는 시도를 표시합니다. 이는 제가 기억할 수 있는 한 오랫동안 지속되어 온 정상적인 현상입니다.
특히 데이터베이스는 피싱 공격을 위해 메일링 리스트에 액세스하거나 사기 및 신원 도용을 위해 신용카드 정보를 추출하기 위해 시스템을 악용하려는 범죄자들에게는 꿀팁이 될 수 있습니다. 따라서 이러한 서비스를 안전하게 보호해야 합니다.
운영자의 공용 연결 기능은 완전한 종단 간 암호화를 사용하도록 의무화합니다. 이렇게 하면 스누퍼가 공용 네트워크에 있는 동안 기밀 정보를 볼 수 없습니다. 디지털 인증서는 클라이언트와 서버 간에 신뢰를 형성합니다. 클라이언트는 연결하려는 호스트 이름에 대해 서버가 유효한지, 신뢰할 수 있는 인증 기관이 서명했는지 확인합니다.
운영자는 서버 인증서 체인만 사용하도록 허용하며 토폴로지가 변경될 때 개별 서버에 대한 서버 인증서를 서명하는 인증 기관 역할을 하지 않습니다. CA 역할을 하면 모든 인증서를 생성하고 서명할 수 있으므로 안전한 방법을 선택합니다. 따라서 저희는 클러스터 전체에 대해 와일드카드 인증서를 지원합니다. 와일드카드 인증서를 사용할 때는 클라이언트가 접속하는 호스트에 대해 서버 인증서가 유효한지 확인할 수 있도록 공용 DNS도 사용해야 합니다.
이러한 배경 지식을 통해 퍼블릭 연결로 데이터베이스 배포를 시작할 수 있는 충분한 지식을 얻었습니다.
시작하기
DNS
앞서 설명한 대로 공용 연결을 사용할 때 Couchbase 클러스터 노드에 연결하려면 공용 DNS를 사용해야 합니다. 다음과 같은 등록 기관에서 온라인으로 비교적 저렴하게 구입할 수 있습니다. 간디, GoDaddy, Namecheap 등
또한 동적 DNS를 사용할 수 있어야 합니다. Couchbase 클러스터에서 노드가 추가 및 제거될 때 해당 항목을 DNS에서 추가 및 제거해야 합니다. 또한 이러한 노드의 공인 IP 주소가 변경되면 해당 항목도 업데이트해야 합니다. 이는 Couchbase 클라이언트와 XDCR에서 사용하는 고성능 클라이언트 측 샤딩 때문입니다. 우리는 쿠버네티스 외부-dns 서비스를 사용하여 DDNS 업데이트를 수행합니다. 이 링크에는 지원되는 DDNS 공급업체가 나열되어 있습니다. DNS 도메인을 구입한 후에는 선택한 DDNS 공급업체에 해당 네임 서버를 위임해야 합니다. 이 예제에서 개인적으로 선택한 것은 다음과 같습니다. Cloudflare. 마지막 준비 단계는 외부 DNS 컨트롤러가 DDNS 공급자를 인증하고 Couchbase 클러스터에 필요한 DNS 레코드를 제어하기 위한 API 키 또는 기타 자격 증명을 생성하는 것입니다.
TLS
대부분의 사람들에게 이 과정은 가장 신비로운 부분입니다. HTTPS 웹 페이지는 투명하게 작동하므로 일반 사용자는 매일 이 부분에 대해 신경 쓸 필요가 거의 없습니다. 자세한 내용은 다른 포스팅에서 다룰 것이므로 여기서 논의해야 할 것은 선택한 DNS 구성과 관련된 주요 사항입니다.
개인 DNS 도메인을 사용하고 있습니다, spjmurray.co.uk를 사용하겠습니다. 라는 자체 네임스페이스에 Couchbase 클러스터를 설치하겠습니다. 6c3c0075-b44a-11e9-9518-4a8d7629c69a를 호출하고 클러스터 자체는 카우치베이스. 이 매개변수는 Kubernetes 클러스터 내에서 Couchbase 클러스터를 고유하게 주소 지정할 수 있기 때문에 알아야 할 중요한 매개변수입니다. Couchbase 클러스터는 도메인이 다음과 같도록 구성됩니다. couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk. 운영자는 이 도메인 내에서 각 노드에 대한 A 레코드와 Couchbase 웹 콘솔을 만들어야 합니다.
도메인을 알면 이제 DNS 와일드카드 인증서 주체 대체 이름을 결정할 수 있습니다. *.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk.
OpenVPN의 EasyRSA 도구는 인증서를 생성하는 간단한 방법입니다. 먼저 저장소를 복제하고 초기화합니다.
1 |
git clone https://github.com/OpenVPN/easy-rsa |
1 |
CD EASY-RSA/EASYRSA3 |
1 |
./easyrsa init-pki |
CA 인증서와 키 쌍을 생성합니다. 기억하시겠지만, CA의 개인 키는 서버 인증서를 디지털 서명하는 데 사용됩니다. 그런 다음 클라이언트는 CA의 공개 키를 사용하여 서버 인증서가 진짜인지 확인할 수 있습니다. 이 명령을 실행하면 CA 이름과 비밀번호를 입력하라는 메시지가 표시됩니다. 완료 후 CA 인증서는 다음에서 찾을 수 있습니다. pki/ca.crt.
1 |
./easy-rsa build-ca |
다음으로 서버 인증서와 키 쌍이 생성됩니다. Couchbase 클러스터 구성에 TLS가 지정되면 운영자는 TLS를 사용하여 클러스터와 통신합니다. 이렇게 하면 비밀번호나 민감한 데이터가 일반 텍스트로 전송되는 것을 방지할 수 있습니다. 쿠버네티스의 프라이빗 DNS 이름을 지원하려면 다른 DNS 와일드카드 주체 대체 이름이 필요합니다. 이 와일드카드의 nopass 옵션도 지정해야 개인 키가 암호화되지 않고 Couchbase 서버에서 읽을 수 있습니다. 다음 명령은 인증서를 디지털 서명하는 데 사용되는 CA 개인 키의 비밀번호를 입력하라는 메시지를 표시합니다.
1 |
./easy-rsa --subject-alt-name=DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc,DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk build-server-full server nopass |
OpenSSL에서 인증서를 검사하여 인증서가 예상한 것과 같은지 확인할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
openssl x509 -in cert -noout -text 인증서: 데이터: 버전: 3 (0x2) 일련 번호: b8:a2:ab:74:2c:8a:88:bf:67:3f:a8:d3:9b:fd:09:19 서명 알고리즘: sha256WithRSAEncryption 발급자: CN = Couchbase CA 유효성 이전과는 다릅니다: Aug 1 10:52:15 2019 GMT 이후 : Jul 29 10:52:15 2029 GMT 제목: CN = 카우치베이스 서버 제목 공개 키 정보: 공개 키 알고리즘: rsaEncryption RSA 공개 키: (2048비트) 모듈러스: 00:b8:85:b5:41:16:67:1f:79:32:4c:ed:e1:44:cc: 55:65:db:a1:d1:99:6e:d1:d7:90:a6:5e:eb:4c:96: de:a4:70:dd:74:6c:76:13:75:01:5e:36:a2:5f:f0: 8b:cd:e8:8b:bd:68:2a:f2:5c:e8:3c:78:6d:71:92: db:2c:58:7c:e7:40:a5:73:cc:cd:f4:b7:c8:69:16: d3:c5:15:18:c0:56:d9:b3:f6:86:c6:22:8b:05:22: 77:c7:5c:ce:2a:3d:b8:e8:96:ea:c8:17:a8:3a:27: 7b:94:66:a1:80:89:a2:8b:25:5b:ed:72:ac:d5:29: 37:a1:e5:dd:9f:16:ac:a4:04:14:d8:89:cc:d0:08: f9:f1:58:1f:a7:fa:ee:2d:1a:e5:bd:03:ba:e7:9a: 79:f7:10:d7:0f:9b:bc:f9:cc:c9:03:97:58:78:9f: 68:78:b7:20:cf:5e:a8:67:7b:33:41:91:4a:8c:7c: 44:1a:25:86:ca:15:eb:9a:25:5e:80:23:65:9b:7a: 40:e4:55:c1:9c:93:c8:d6:72:e7:d8:d7:ac:dd:f9: 92:a8:89:c1:bc:ff:1a:7d:a5:e9:ab:6b:b8:3e:c4: 5f:b6:e6:30:45:5c:b4:5a:ce:fa:d9:12:28:ad:e6: 39:7b:39:4b:2e:a2:2a:16:f8:64:36:75:7d:59:78: 41:cf 지수: 65537 (0x10001) X509v3 확장: X509v3 키 사용: 중요 디지털 서명, 키 암호화 X509v3 확장 키 사용: TLS 웹 서버 인증 X509v3 기본 제약 조건: 중요 CA:FALSE X509v3 주제 키 식별자: B8:7D:84:E9:AE:DF:38:90:B4:B5:CC:82:EA:B5:38:D2:35:12:4C:3F X509v3 권한 키 식별자: keyid:78:49:35:9B:B4:03:26:81:B4:5A:68:8C:94:18:CE:2A:5A:12:FE:EE X509v3 제목 대체 이름: DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc, DNS:*.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 서명 알고리즘: sha256WithRSAEncryption 79:75:3c:81:ca:78:50:64:4b:4a:4c:67:9a:22:12:28:e6:76: a0:00:18:87:0f:09:bc:18:28:fb:5c:06:52:51:91:fe:2b:5f: 9c:a2:0f:96:67:ec:0d:44:fd:e4:7d:cc:90:f5:5f:8a:9f:e1: 56:c1:aa:67:fb:fe:8d:6d:fa:fb:04:36:c4:cf:b6:24:ce:4d: e8:87:d9:f0:40:b3:9b:7d:d1:a7:77:6a:1b:ea:11:67:46:14: 84:0b:37:0a:c1:35:b8:53:bd:98:58:3f:98:b5:20:d7:9c:0f: 99:eb:48:71:03:88:1b:8d:ef:b3:08:76:27:53:87:09:cd:4a: 5c:26:fc:bd:ad:82:e4:38:0b:6c:e1:8c:e8:61:8e:38:f5:c0: aa:7c:69:b1:2d:f3:5e:85:8c:0f:42:fc:19:b0:aa:17:81:44: 54:6e:8f:5d:d7:1f:f6:27:5c:fc:a3:78:de:45:e2:d3:3e:30: 14:53:65:fd:01:07:e8:af:b9:a7:fd:04:fb:ec:79:2c:1b:b9: d7:f2:d2:90:2c:6f:ac:ca:09:29:07:73:a3:88:c2:bc:d7:a6: 09:49:31:a6:5b:96:40:12:5e:6f:82:bd:32:7f:ba:dc:6c:ad: d2:ed:a8:70:42:99:4e:6c:8a:4f:43:c3:a3:a0:70:42:ea:23: E3:A5:61:60 |
EasyRSA는 최신 PKCS#7 형식으로 개인 키를 생성하지만 Couchbase Server는 PKCS#1만 지원합니다. 이 문제를 해결하려면 형식을 변환해야 합니다.
1 |
openssl rsa -in pki/private/server.key -out server.key.der -outform DER |
1 |
openssl rsa -in server.key.der -inform DER -out server.key -outform PEM |
이제 TLS가 구성되었으므로 이후 단계에서 Couchbase 클러스터를 구성할 때 필요하므로 CA 인증서와 서버 인증서/개인 키 쌍을 수집합니다.
DDNS 설정
이제 실제 쿠버네티스 리소스 배포를 시작할 수 있습니다. 먼저, 외부-dns 컨트롤러가 실행될 네임스페이스와 실행할 서비스 계정을 생성해 보겠습니다.
1 |
kubectl 네임스페이스 생성 6c3c0075-b44a-11e9-9518-4a8d7629c69a |
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a 서비스 계정 외부-dns 생성 |
외부-dns 컨트롤러가 실행 중인 네임스페이스에서 쿠버네티스 리소스를 조회할 수 있는 권한을 부여하려면 역할이 필요하다. 역할은 외부-dns 컨트롤러가 실행될 서비스 계정에 바인딩됩니다. 이 예제에서는 외부-dns 컨트롤러의 모든 인스턴스 간에 공유할 수 있도록 클러스터 역할을 사용하겠습니다. 그러나 컨트롤러가 모든 네임스페이스에 액세스할 필요는 없으므로 네임스페이스 내에 바인딩됩니다. OpenShift 사용자: 권한 승격이 필요하고 보안상의 이유로 일반 사용자가 수행할 수 없는 역할 생성 및 바인딩에는 관리자 권한이 필요합니다. 역할은 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apiVersion: rbac.authorization.k8s.io/v1 종류: 클러스터 역할 메타데이터: 이름외부-dns 규칙: - apiGroups: - "" 리소스: - 서비스 - 포드 - 노드 동사: - get - 시계 - 목록 |
그리고 다음과 함께 설치됩니다:
1 |
kubectl create -f external-dns-cluster-role.yaml |
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create rolebinding --clusterrole external-dns --serviceaccount 6c3c0075-b44a-11e9-9518-4a8d7629c69a:external-dns external-dns |
마지막 단계는 외부 DNS 컨트롤러를 설치하는 것입니다. 네임스페이스 내에서 서비스를 찾도록 구성합니다. 서비스에 어노테이션이 있는 경우 외부-dns.alpha.kubernetes.io/hostname 를 입력하면 외부-dns 컨트롤러가 서비스의 IP 주소에 매핑되는 DDNS 공급자에 DNS A 레코드를 생성합니다.
여러 외부-dns 인스턴스가 동일한 도메인에 DNS 레코드를 동기화하고 있을 수 있습니다. 관리 중인 서비스와 일치하지 않는 레코드를 발견하면 삭제합니다. 두 개 이상의 컨트롤러가 계속해서 자신의 레코드를 추가하고 다른 컨트롤러의 레코드를 삭제하는 것을 방지하기 위해 컨트롤러가 자신이 소유한 레코드에만 응답하도록 GUID를 추가합니다. 궁금하신 분들을 위해 소유권은 DNS TXT 레코드를 통해 관리됩니다. 배포 YAML은 다음과 같습니다. 환경 매개변수에서 자신의 Cloudflare API 키와 이메일 주소를 대체해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
apiVersion: 확장/V1베타1 종류: 배포 메타데이터: 이름외부-dns 사양: 선택기: matchLabels: 앱외부-dns 템플릿: 메타데이터: 레이블: 앱외부-dns 사양: 서비스 계정 이름외부-dns 컨테이너: - 이름외부-dns 이미지: registry.opensource.zalan.do/teapot/external-dns최신 args: - --source=서비스 - --domain-filter=spjmurray.co.uk - --제공자=클라우드플레어 - --txt-owner-id=6c3c0075-b44a-11e9-9518-4a8d7629c69a 환경: - 이름: CF_API_KEY 값: 편집됨 - 이름: CF_API_EMAIL 값: 편집됨 |
다음을 사용하여 만들 수 있습니다:
1 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a create -f external-dns.yaml |
배포가 실행 중이고 Couchbase 클러스터를 설치할 준비가 되었는지 확인합니다.
운영자 설치
이는 다음 문서에서 광범위하게 다루고 있습니다. 공식 문서. 먼저, 사용자 정의 리소스 정의를 설치해야 합니다. 그런 다음 동적 어드미션 컨트롤러를 원하는 네임스페이스에 설치하고 Kubernetes API에 연결합니다.
어드미션 컨트롤러는 Operator 1.2.0 배포의 필수 구성 요소입니다. 이 컨트롤러는 클러스터에 기본값을 적용하며, 가장 중요한 것은 기본 JSON 스키마 유효성 검사의 범위를 벗어난 유효성 검사를 수행한다는 점입니다. 이 설정에서 수행하는 가장 중요한 유효성 검사는 DNS 및 TLS가 Couchbase 클러스터 정의에서 올바르게 구성되었는지 확인하는 것입니다.
오퍼레이터는 외부-dns 컨트롤러와 매우 유사한 프로세스를 사용하여 외부-dns 컨트롤러와 동일한 네임스페이스에 설치됩니다.
퍼블릭 카우치베이스 클러스터
사실 마지막 단계가 가장 쉽습니다. 다음은 YAML 정의입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
apiVersion: couchbase.com/v1 종류: 카우치베이스클러스터 메타데이터: 이름: 카우치베이스 사양: authSecret: 6c3c0075-b44a-11e9-9518-4a8d7629c69a baseImage: 카우치베이스/서버 버전: 엔터프라이즈-6.0.1 노출 관리자 콘솔true 관리자 콘솔 서비스 유형: 로드밸런서 관리자 콘솔 서비스: - 데이터 노출된 기능 서비스 유형: 로드밸런서 노출된 기능: - xdcr - 클라이언트 dns: 도메인: 6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk tls: 정적: 연산자 비밀: couchbase-ca 회원: 서버시크릿: couchbase-cert 서버: - 이름기본값 서비스: - 데이터 - 색인 - 쿼리 크기: 3 |
관리자 콘솔과 노출된 기능(파드 서비스별로)은 서비스 유형을 지정할 수 있는 새로운 매개변수와 함께 노출됩니다. 이번에는 GKE에서 실행하고 있습니다. 언제 로드밸런서 서비스가 생성되면 해당 서비스와 연결된 공인 IP 주소를 얻습니다.
새 DNS 설정이 지정되면 관리자 콘솔 및 포드별 서비스에 외부 DNS 컨트롤러가 이해하는 레이블이 주석으로 추가됩니다. 관리 콘솔 설정의 경우 다음과 같습니다. console.${metadata.name}.${spec.dns.domain} 예를 들어
마지막으로, 공용 연결 및 DNS를 사용하므로 동적 허용 컨트롤러가 TLS를 사용하도록 합니다. TLS 매개 변수는 다음과 같습니다. 비밀로 가득 찬 이 클러스터에 대해 앞서 만든 TLS 인증서가 포함되어 있습니다.
클러스터를 만들고 완료 여부에 대한 상태 또는 운영자 로그를 확인합니다. 결국 다음 URL을 사용하여 콘솔에 연결할 수 있어야 합니다. https://console.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk:18091/ 로 로드밸런서 IP가 할당되고 DNS 레코드가 추가됩니다. 이 주소를 사용하여 XDCR 원격 클러스터를 설정하고 카우치베이스 클라이언트 SDK를 부트스트랩할 수 있습니다. 공용 연결을 사용 설정한 것을 축하드립니다!
문제 해결
단순히 공개 연결을 구성하는 방법을 설명하는 것만으로는 작업의 절반이 끝나지 않습니다. 지원 케이스를 제기하기 전에 문제가 어디에 있는지 파악할 수 있어야 합니다. 대부분의 경우 네트워크의 잘못이라는 점을 감안하여 몇 가지 도움이 되는 팁을 알려드립니다.
DNS는 즉각적인 것이 아니므로 레코드가 표시되는 데 시간이 걸리며 TTL이 만료됨에 따라 수정 사항이 전파되는 데 시간이 걸립니다. DNS가 예상대로 작동하는지 확인하려면 먼저 예상되는 DNS 이름을 찾아보세요. 서비스 이름을 찾습니다:
1 2 3 4 5 6 7 8 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a get svc 이름 유형 클러스터-IP 외부-IP 포트 나이 카우치베이스 클러스터IP 없음 8091/TCP,18091/TCP 26시간 couchbase-0000-exposed-ports LoadBalancer 10.40.8.108 34.66.243.123 18091:32281/TCP,18092:32677/TCP,11207:31661/TCP,18093:32233/TCP 26h couchbase-0001-exposed-ports LoadBalancer 10.40.6.37 35.232.231.230 18091:32171/TCP,18092:31995/TCP,11207:30711/TCP,18093:31243/TCP 26h couchbase-0002-exposed-ports LoadBalancer 10.40.4.46 35.238.213.211 18091:32117/TCP,18092:30313/TCP,11207:32609/TCP,18093:32433/TCP 26h couchbase-srv 클러스터IP 없음 11210/TCP,11207/TCP 26시간 couchbase-ui LoadBalancer 10.40.13.78 35.238.226.107 18091:32508/TCP 26h |
계산된 DNS 이름을 조회합니다:
1 2 |
kubectl -n 6c3c0075-b44a-11e9-9518-4a8d7629c69a get svc couchbase-0000-exposed-ports -o yaml | grep external-dns.alpha.kubernetes.io/hostname 외부-dns.alpha.kubernetes.io/호스트명: couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk |
DNS A 레코드가 존재하나요? IP 주소가 서비스의 공인 IP 주소와 일치하나요?
1 2 |
dig +short couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 34.66.243.123 |
다음으로 요청된 포트가 수신 대기 중인지 확인해야 합니다. TLS가 활성화된 관리 포트가 수신 대기 중인지 확인하고 해당 포트에서 TCP 세션을 설정할 수 있습니다:
1 2 |
nc -vz couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 18091 couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk 18091 포트 [tcp/*]에 연결에 성공했습니다! |
마지막으로 해야 할 일은 CA 인증서를 사용하여 TLS가 예상대로 작동하는지 확인하는 것입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
openssl s_client -호스트 couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk -포트 18091 -CAfile ca.crt 연결됨(00000005) 깊이=1 CN = 카우치베이스 CA 반환 확인:1 깊이=0 CN = 카우치베이스 서버 반환 확인:1 --- 인증서 체인 0 s:CN = 카우치베이스 서버 i:CN = 카우치베이스 CA 1 s:CN = 카우치베이스 CA i:CN = 카우치베이스 CA --- 서버 인증서 -----비긴 인증서----- MIIDuDCCAqCgAwIBAgIRALiiq3Qsioi/Zz+o05v9CRkwDQYJKoZIhvcNAQELBQAw FzEVMBMGA1UEAxMMQ291Y2hiYXNlIENBMB4XDTE5MDgwMTEwNTIxNVoXDTI5MDcy OTEwNTIxNVowGzEZMBcGA1UEAxMQQ291Y2hiYXNlIFNlcnZlcjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALiFtUEWZx95Mkzt4UTMVWXbodGZbtHXkKZe 60yW3qRw3XRsdhN1AV42ol/wi83oi71oKvJc6Dx4bXGS2yxYfOdApXPMzfS3yGkW 08UVGMBW2bP2hsYiiwUid8dczio9uOiW6sgXqDone5RmoYCJooslW+1yrNUpN6Hl 3Z8WrKQEFNiJzNAI+fFYH6f67i0a5b0DuueaefcQ1w+bvPnMyQOXWHifaHi3IM9e qGd7M0GRSox8RBolhsoV65olXoAjZZt6QORVwZyTyNZy59jXrN35kqiJwbz/Gn2l 6atruD7EX7bmMEVctFrO+tkSKK3mOXs5Sy6iKhb4ZDZ1fVl4Qc8CAwEAAaOB+jCB 9zAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/ BAIwADAdBgNVHQ4EFgQUuH2E6a7fOJC0tcyC6rU40jUSTD8wHwYDVR0jBBgwFoAU eEk1m7QDJoG0WmiMlBjOKloS/u4wgYEGA1UdEQR6MHiCNCouY291Y2hiYXNlLjZj M2MwMDc1LWI0NGEtMTFlOS05NTE4LTRhOGQ3NjI5YzY5YS5zdmOCQCouY291Y2hi YXNlLjZjM2MwMDc1LWI0NGEtMTFlOS05NTE4LTRhOGQ3NjI5YzY5YS5zcGptdXJy YXkuY28udWswDQYJKoZIhvcNAQELBQADggEBAHl1PIHKeFBkS0pMZ5oiEijmdqAA GIcPCbwYKPtcBlJRkf4rX5yiD5Zn7A1E/eR9zJD1X4qf4VbBqmf7/o1t+vsENsTP tiTOTeiH2fBAs5t90ad3ahvqEWdGFIQLNwrBNbhTvZhYP5i1INecD5nrSHEDiBuN 77MIdidThwnNSlwm/L2tguQ4C2zhjOhhjjj1wKp8abEt816FjA9C/BmwqheBRFRu j13XH/YnXPyjeN5F4tM+MBRTZf0BB+ivuaf9BPvseSwbudfy0pAsb6zKCSkHc6OI wrzXpglJMaZblkASXm+CvTJ/utxsrdLtqHBCmU5sik9Dw6OgcELqI+OlYWA= ----- 인증서 종료----- subject=CN = 카우치베이스 서버 발행자=CN = 카우치베이스 CA --- 클라이언트 인증서 CA 이름이 전송되지 않음 피어 서명 요약: SHA256 피어 서명 유형: RSA 서버 임시 키: DH, 2048비트 --- SSL 핸드셰이크가 2714바이트를 읽고 737바이트를 썼습니다. 인증: 확인 --- 신규, TLSv1.2, 암호는 DHE-RSA-AES256-SHA256입니다. 서버 공개 키는 2048비트입니다. 보안 재협상이 지원됩니다. 압축: 없음 확장: 확장: 없음 협상된 ALPN 없음 SSL-세션: 프로토콜 : TLSv1.2 암호 : DHE-RSA-AES256-SHA256 Session-ID: 1D4242B756A51A14F1CA360DD7BB2DB74CEB4897E3365576658D2E5A7C7B36A0 Session-ID-ctx: Master-Key: 11D43F8E21FD57A07D091913A892D1BBEC32A701491FCE0EAA1EAEA68084F3754CA746921F9E80FBA3EDB4F809A791A7 PSK 정체성: 없음 PSK 신원 힌트: 없음 SRP 사용자 이름: 없음 시작 시간: 1564751720 시간 초과 : 7200 (초) 반환 코드를 확인합니다: 0 (확인) 확장 마스터 비밀: 아니요 --- |
또한 용감한 분들을 위해 클라이언트에 전달된 DNS 주소가 올바른지 확인할 수도 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
curl -s https://couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk:18091/pools/default/nodeServices -u 관리자:BIH6mSJQ33jcIb24LZagxn0GHpxsJEWiiXSHNnyoXxp2GITJWMgc4aEOxVVllcCR --cacert ca.crt | python -m json.tool { "nodesExt": [ { "대체 주소": { "외부": { "호스트 이름": "couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.spjmurray.co.uk" } }, "호스트명": "couchbase-0000.couchbase.6c3c0075-b44a-11e9-9518-4a8d7629c69a.svc", "서비스": { "capi": 8092, "capiSSL": 18092, "indexAdmin": 9100, "indexHttp": 9102, "indexHttps": 19102, "indexScan": 9101, "인덱스스트림캐치업": 9104, "indexStreamInit": 9103, "indexStreamMaint": 9105, "kv": 11210, "kvSSL": 11207, "mgmt": 8091, "mgmtSSL": 18091, "moxi": 11211, "n1ql": 8093, "n1qlSSL": 18093, "프로젝터": 9999 }, "thisNode": true }, |
다음 단계
카우치베이스 자율 운영자 1.2.0은 많은 새로운 기능이 포함된 대규모 릴리스입니다. 주요 초점은 업그레이드 가능성과 사용 편의성입니다. 저희가 만든 즐거움만큼이나 여러분도 멋진 새 기능을 사용해 보시기 바랍니다. 언제나 그렇듯이 여러분의 피드백이 가장 중요합니다!
- 사용해 보세요: https://www.couchbase.com/downloads
- 지원 포럼: https://www.couchbase.com/forums/c/couchbase-server/Kubernetes
- 문서화: https://docs.couchbase.com/operator/1.2/whats-new.html
자세히 보기
- 자율 운영자 1.2.0 네트워킹: https://www.couchbase.com/blog/autonomous-operator-1-2-0-networking
훌륭한 기능입니다. 하지만 하나의 값만 설정할 수 있습니다.
노출된 기능
를 입력하지 않으면 오류가 발생합니다:본문 내 spec.exposedFeatures는 [관리자 xdcr 클라이언트] 중 하나여야 합니다.
그리고 또 다른 질문은 운영자의 소스 코드를 찾을 수 없습니다. 운영자가 오픈 소스인가요?