Kubernetes 서비스 환경 변수
메모
Bridge to Kubernetes는 2025년 4월 30일에 사용 중지됩니다. 사용 중지 및 오픈 소스 대안에 대한 자세한 내용은 GitHub문제를 참조하세요.
예를 들어 HTTP 요청과 같은 Kubernetes 클러스터의 다른 서비스와 통신하는 경우 일반적으로 요청에 대한 URL에서 하드 코딩된 서비스 이름을 사용하지만 Bridge to Kubernetes를 사용하는 일부 시나리오에서는 작동하지 않습니다. 이 문서에서는 Kubernetes 서비스 환경 변수를 사용하여 연결 URL을 지정하는 방법을 설명합니다.
리디렉션 실패 방지
Bridge to Kubernetes는 네트워크 트래픽을 자체 버전의 서비스로 리디렉션하도록 호스트 이름 확인을 수정하여 트래픽을 다시 라우팅합니다. 리디렉션은 대부분의 시나리오에서 작동하지만, 요청이 상승되지 않은 사용자 계정에서 시작되거나 VS Code 원격 SSH를 사용하는 경우와 같이 Bridge to Kubernetes 프로세스에 제한된 권한이 있는 경우 실패합니다. 리디렉션된 서비스에 대한 이름 확인을 사용하도록 설정하기 위해 Bridge to Kubernetes는 호스트 파일을 수정해야 하지만 상승되지 않은 사용자 계정에서 Bridge to Kubernetes가 실행되는 경우에는 불가능하기 때문입니다. 이 문제를 해결하려면 하드 코딩된 서비스 이름 대신 Kubernetes 서비스 환경 변수를 사용하는 코드를 작성할 수 있습니다.
환경 변수 테이블
다음 표에서는 포트에서 TCP 프로토콜을 사용하는 예제 서비스에 대해 클러스터의 모든 서비스에서 사용할 수 있는 Kubernetes 서비스 환경 변수를 보여 줍니다. 서비스 이름 대문자로 변환되고 하이픈이 밑줄로 변환된 서비스의 이름입니다. 예를 들어 web-api라는 서비스는 WEB_API_SERVICE_HOST 환경 변수를 생성합니다.
이름 | 예시 | 묘사 |
---|---|---|
서비스 이름_SERVICE_HOST | 10.0.0.11 | 서비스 호스트의 이름 |
서비스 이름_SERVICE_PORT | 6379 | 서비스의 포트 |
서비스명_PORT | tcp://10.0.0.11:6379 | 프로토콜, IP 주소 및 포트가 있는 URL입니다. |
servicename_PORT_portnumber_프로토콜 | tcp://10.0.0.11:6379 | 프로토콜, IP 주소 및 포트가 있는 URL입니다. |
servicename_PORT_portnumber_프로토콜_PROTO | tcp | 프로토콜 식별자입니다. |
servicename_포트_포트번호_프로토콜_포트 | 6379 | TCP의 포트 번호입니다. |
servicename_PORT_portnumber_프로토콜_ADDR | 10.0.0.11 | TCP의 IP 주소입니다. |
따라서 서비스의 이름이 web-api이면 변수가 WEB_API_SERVICE_HOST WEB_API_SERVICE_PORT 등입니다. Kubernetes에서 만든 기본 환경 변수는 Kubernetes 설명서설명되어 있습니다. 지원되는 프로토콜에 대한 자세한 내용은 지원되는 프로토콜참조하세요.
소스 코드의 환경 변수
상승된 권한 없이 Bridge to Kubernetes에서 서비스를 실행할 수 있도록 하려면 호스트 이름에 대한 하드 코드된 참조를 환경 변수로 바꿉니다. 다음 예제에서는 C#으로 작성된 mywebapi라는 .NET 서비스에서 이를 보여줍니다.
using var client = new HttpClient();
var host = Environment.GetEnvironmentVariable("MYWEBAPI_SERVICE_HOST");
var port = Environment.GetEnvironmentVariable("MYWEBAPI_SERVICE_PORT");
var request = new HttpRequestMessage();
request.RequestUri = new Uri($"http://{host}:{port}/api/data");
var response = await client.SendAsync(request);
Node.js 예제는 다음과 같습니다.
server.get("/api/data", function (req, res) {
var options = {
host: process.env.MYWEBAPI_SERVICE_HOST,
port: process.env.MYWEBAPI_SERVICE_PORT,
path: '/api/data',
method: 'GET'
};
var req = http.request(options, function(response) {
res.setHeader('Content-Type', 'application/json');
var responseString = '';
//another chunk of data has been received, so append it to `responseString`
response.on('data', function (chunk) {
responseString += chunk;
});
response.on('end', function () {
res.send(responseString);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.end();
});
환경 변수를 사용하도록 코드를 업데이트하려면 호스트 이름을 찾아서 서비스 이름 _SERVICE_HOST환경 변수에서 가져온 값을 사용하도록 업데이트합니다.
일반적으로 대상 서비스를 호출할 때 대상 서비스에서 사용하는 포트를 지정하지 않더라도 서비스 이름_SERVICE_PORT 환경 변수를 사용해야 합니다. 포트를 지정하면 Bridge to Kubernetes가 개발 머신에서 특정 포트를 사용할 수 없을 때 발생하는 충돌을 방지할 수 있습니다. 서비스가 이를 수신 대기하는 포트를 변경할 필요가 없습니다. 서비스가 다른 서비스를 호출할 때 서비스 이름_SERVICE_HOST 및 서비스 이름_SERVICE_PORT 환경 변수를 모두 사용하여 호출하는지 확인해야 합니다.
클러스터의 다른 위치에서 동일한 코드를 다시 사용하는 경우 클러스터의 모든 Pod에서 이러한 환경 변수를 사용할 수 있으므로 괜찮습니다. Kubernetes 클러스터 외부에서 동일한 코드를 다시 사용하는 경우 해당하는 환경 변수를 설정하거나 새 플랫폼 또는 호스팅 서비스에 맞게 코드를 수정해야 합니다.
Kubernetes 서비스 환경 변수를 사용하도록 VS Code 설정
원격 컴퓨터에서 VS Code를 사용하거나 VS Code를 관리자가 아닌 사용자로 실행하는 경우 Kubernetes 서비스 환경 변수를 사용하도록 VS Code를 구성해야 합니다. tasks.json을 열고, 레이블이 붙은 bridge-to-kubernetes.service
작업을 찾은 다음, 값이 usekubernetesServiceEnvironmentVariables
인 속성 true
를 다음 코드와 같이 추가합니다.
"tasks": [
{
"label": "bridge-to-kubernetes.service",
"type": "bridge-to-kubernetes.service",
"service": "bikes",
"ports": [
3000
],
"useKubernetesServiceEnvironmentVariables": true
}
]
Kubernetes 서비스 환경 변수를 사용하도록 Visual Studio 설정
관리자가 아닌 사용자로 Visual Studio를 실행하는 경우 Kubernetes 서비스 환경 변수를 사용하도록 Visual Studio를 구성해야 합니다. launchSettings.json을 열고, 레이블 Bridge to Kubernetes
이 있는 프로필을 찾아 다음 코드와 같이 값 useKubeServiceEnvironmentVariables
을 속성 true
에 추가합니다.
"Bridge to Kubernetes": {
"commandName": "AzureDevSpacesLocal",
"launchBrowser": true,
"useKubeServiceEnvironmentVariables": true
}
VS Code 또는 Visual Studio를 관리자가 아닌 사용자로 실행하거나 원격 세션을 사용하는 경우에만 설정이 필요하지만 이 문서에 설명된 대로 코드를 수정한 경우에는 이 속성을 설정하는 데 아무런 피해가 없습니다.
다음 단계
Bridge to Kubernetes 구성에 대해 자세히 알아보려면 Bridge to Kubernetes 구성 방법을 참조하세요.