쿠버네티스에서 서비스의 URL을 찾는 방법은?
로컬 도커 데스크톱에 로컬 쿠버네티스 클러스터가 있습니다.
이것은 내가 할 때 내 쿠버네티스 서비스의 모습이다
Name: helloworldsvc
Namespace: test
Labels: app=helloworldsvc
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"helloworldsvc"},"name":"helloworldsvc","namespace":"test...
Selector: app=helloworldapp
Type: ClusterIP
IP: 10.108.182.240
Port: http 9111/TCP
TargetPort: 80/TCP
Endpoints: 10.1.0.28:80
Session Affinity: None
Events: <none>
이 서비스는 웹 앱이 있는 배포를 가리킵니다.
이 서비스의 URL을 찾는 방법에 대한 질문입니다? 나는 이미 http://localhost:9111/을 시도했지만 작동하지 않았다.
이 서비스가 가리키는 포드가 작동 중임을 확인했습니다.
생성한 서비스가 클러스터 유형입니다클러스터 내부에서만 액세스할 수 있는 IP입니다. 데스크톱에서 액세스하는 방법은 두 가지가 있습니다:
유형 서비스를 만든 다음 다음을 통해 액세스합니다
Kubectl을 사용하고 다음을 통해 액세스합니다
서비스 URL은 다음 형식입니다:
<service-name>.<namespace>.svc.cluster.local:<service-port>
당신의 경우는 다음과 같습니다:
helloworldsvc.test.svc.cluster.local:9111
서비스 이름 가져오기:
kubernetes 서비스에 대한 URL은 여기서 은 kubernetes 클러스터 이름입니다.
클러스터 이름을 가져오려면:
당신의 경우에 서비스를 제공하기 위해서는
당신이 하려고 하는 방법은 당신의 로컬 호스트에서 그것을 이용할 수 있도록 하는 것과 같이 작동하지 않을 것이다. 당신은 서비스를 쿠벡틀을 사용하거나 사용할 수 있도록 해야 한다.
그러나 노드 포트를 원하지 않고 컨테이너 내부에서 모든 것이 정상적으로 작동하는지 확인하려면 다음 단계를 수행하여 셸이 있는 경우 컨테이너 내부로 들어갑니다.
kubectl exec -it container-name -n its-namespace-name sh
그리고 나서 하다
또는
그러나 두 curl 명령은 모두 Kubernetes pod 내부에서만 작동하며 로컬 호스트 시스템에서는 작동하지 않습니다.
호스트 시스템에서 액세스하려면
작업 중인 경우 아래 코드를 실행할 수 있습니다
minikube service --all
특정 서비스를 위해
minikube service service-name --url
다음은 서비스 URL을 얻는 다른 방법입니다
하나의 포드 입력
kubectl exec -it podName -n namespace -- /bin/sh
그런 다음 포드에서와 같이 실행합니다
/ # nslookup 172.20.2.213
nslookup: can't resolve '(null)': Name does not resolve
Name: 172.20.2.213
Address 1: 172.20.2.213 172-20-2-213.servicename.namespace.svc.cluster.local
또는 포드에서 실행합니다
/ # nslookup servicename
nslookup: can't resolve '(null)': Name does not resolve
Name: 172.20.2.213
Address 1: 172.20.2.213 172-20-2-213.servicename.namespace.svc.cluster.local
이제 의 출력에 대한 IP를 제거한 후 서비스 URL이 서비스 포트에 첨부됩니다.
동일한 클러스터에 있고 동일한 네임스페이스에 있을 때 다음과 같은 변형이 적용되었습니다(namespace: 서비스가 서로 다른 네임스페이스에 있을 때는 처음을 제외한 모든 버전이 계속 작동합니다):
http://helloworldsvc
http://helloworldsvc.default
http://helloworldsvc.default.svc
http://helloworldsvc.default.svc.cluster.local
http://helloworldsvc.default.svc.cluster.local:80
//
using HttpClient client = new();
string result = await client.GetStringAsync(url);
주의:
- ASP와 통화 중입니다.NET 6 응용 프로그램 사용
- 그 클라이언트는 기본적으로 포트를 80으로 설정하기 때문에 포트를 명시적으로 설정할 필요가 없다고 생각합니다. 하지만 이 모든 것에 대해 URL에서 추가하거나 제거할 수 있음을 확인했습니다
- only(특별하게 구성하지 않은 경우 제외)
- 네임스페이스는 첫 번째 경우에만 생략할 수 있습니다(즉, 도메인 / '도메인'이 서비스 이름일 경우). 예외적으로 실패합니다
일반적으로 K8s 환경에서 실행되는 도커 기반 컨테이너는 과도한 도구가 제거되지만 포드에 들어가면 다음과 같이 됩니다:
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh
그런 다음 다음 다음과 같이 dns 도메인 이름을 사용합니다:
kafka-0:/$ dnsdomainname
kafka-headless.kafka.svc.cluster.local
'개발하자' 카테고리의 다른 글
주피터를 설정하려면 어떻게 해야 하나요장고를 위한 아이피톤 노트북? (1) | 2023.03.02 |
---|---|
웹 빌드를 위해 SQLite 플러터를 실행할 수 있는 옵션이 있습니까? (0) | 2023.03.01 |
핸드셰이크 플러시 중에 연결이 종료됨 (0) | 2023.02.28 |
플래터 앱에서 기본 스플래시 화면을 제거하는 방법은 무엇입니까? (0) | 2023.02.27 |
Flot-Firebase: 터미널에서 Firebase 프로젝트를 생성할 수 없습니다 (0) | 2023.02.27 |