다음과 같은 수신 매니페스트 파일이 있습니다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: fsm
name: fsm
labels:
app: fsm
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
cert-manager.io/issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
- k8s-cluster.int
secretName: quickstart-example-tls
rules:
- host: k8s-cluster.int
http:
paths:
- path: /fsm(/|$)(.*)
backend:
serviceName: fsm
servicePort: 8081
저는 Vsphere를 사용하여 VMware와 협력하고 있습니다. 나에겐 그런 도메인이 없어www.google.com, k8s-cluster인 DNS 이름과 도메인 .int(내 회사 내부)입니다. 인증서를 생성하려고 하면 다음 오류가 발생합니다.
"msg"="error waiting for authorization" "error"="acme: authorization error for k8s-cluster.int: 400 urn:ietf:params:acme:error:dns: DNS problem: NXDOMAIN looking up A for k8s-cluster.int - check that a DNS record exists for this domain" "dnsName"="k8s-cluster.int" "resource_kind"="Challenge" "resource_name"="quickstart-example-tls-w7vj9-4141989927-3312743172" "resource_namespace"="fsm" "resource_version"="v1" "type"="HTTP-01"
k8s-cluster.int가 인트라넷 내부에 있기 때문에 이 문제가 나타날 수 있습니까? k8s-cluster.int를 컬링하면
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.19.1</center>
</body>
</html>
그래서 저는 DNS가 작동한다고 생각합니다.
답변1
ACME를 사용하려고 했으나 Let's Encrypt가 사용하는 것입니다. ACME 프로토콜은 기본적으로 자동화된 DNS 도메인 검증이며 "도메인 검증" 인증서를 제공합니다. 요청된 이름이 있는 DNS 레코드가 실제로 요청 서버를 가리키는지(또는 요청 서버의 제어 하에 있는지) 확인하여 서버가 해당 인증서를 가질 수 있음을 "증명"합니다.
이는 글로벌 DNS 트리에 있는 도메인 이름에 대해서만 도메인 유효성 검사가 가능함을 의미합니다. 전역 DNS 트리에 존재하지 않는(또는 존재하지만 귀하의 이름이 존재하지 않거나 귀하의 소유인) ".int" 접미사를 사용합니다. ACME에서는 "도메인 검증"이 가능하지 않습니다.
따라서 이 이름에 대해 ACME를 사용하여 인증서를 생성할 수 없습니다. 죄송합니다.
귀하의 옵션은 다음과 같습니다:
- 자신의 "내부" CA를 인스턴스화하고 관련된 모든 시스템에서 루트 인증서를 신뢰한 다음 이를 사용하여 인증서를 생성합니다. 예를 들어 MS AD 인증 서비스가 될 수 있습니다. 이를 위해서는 CA의 인스턴스화 및 지원을 위한 일부 작업이 필요하지만 ".int"를 계속 사용할 수 있습니다.
- 전역적으로 등록된 도메인의 하위 도메인을 사용합니다. 즉, ".int" 접미사를 ".int.example.com"과 같은 것으로 변경합니다. 여기서 example.com은 구매하고 위임한 도메인입니다. 그런 다음 예를 들어 일부 역방향 프록시를 설정하고 모든 "내부" 이름을 전역 DNS에 있는 해당 프록시의 공개 주소로 지정하여 "내부" 호스트에 ACME를 사용할 수 있습니다.
수년간의 네트워크 엔지니어 경험 끝에 저는 이 두 번째 대안을 선택하게 되었습니다. 나는 ".int", ".local", ".lan" 등과 같은 "분리된 개인 내부" 이름을 내부 서비스에 사용하지 않습니다. "외부 세계"와 연결하지 않을 것이라는 것을 알더라도, 인터넷과 물리적으로 연결이 끊어졌습니다. 나는 항상 내가 소유한 글로벌 도메인 이름에서 파생된 이름을 사용합니다. 이로 인해 많은 작업이 절약되었습니다. 그리고 때때로 이러한 "분리된" 이름이 사용되는 네트워크를 만날 때, 거의 항상 모호한 문제를 해결하기 위한 몇 가지 이상한 점이 있습니다. 전역 이름을 사용하는 경우에는 필요하지 않은 것입니다.