Kubernetes 서비스 환경 변수
참고 항목
Microsoft는 더 이상 Bridge to Kubernetes 프로젝트를 적극적으로 유지 관리하지 않을 계획입니다. 앞으로 몇 개월 동안 프로젝트를 보관 상태로 전환할 것입니다. 그 동안 프로젝트를 계속 사용하고 다운로드할 수 있습니다. 이 기간 동안 나중에 사용할 수 있도록 Bridge to Kubernetes와 유사한 혜택을 제공하는 커뮤니티 프로젝트를 탐색하고 추천할 수 있기를 바랍니다. 질문이 있는 경우 GitHub의 문제 보드에서 문의하세요.
HTTP 요청 등이 있는 동일한 Kubernetes 클러스터에 있는 다른 서비스와 통신할 때는 일반적으로 요청에 대한 URL에 있는 하드 코드된 서비스 이름을 사용하지만, Bridge to Kubernetes를 사용하는 일부 시나리오에서는 이를 사용할 수 없습니다. 이 문서에서는 Kubernetes 서비스 환경 변수를 사용하여 연결 URL을 지정하는 방법을 설명합니다.
리디렉션 실패 방지
Bridge to Kubernetes는 호스트 이름 확인을 수정하여 네트워크 트래픽을 고유한 서비스 버전으로 리디렉션함으로써 트래픽을 재라우팅합니다. 리디렉션은 대부분의 시나리오에서 효과가 있지만 요청이 일반 사용자 계정에서 발생한 경우 또는 VS Code Remote SSH를 사용하는 경우와 같이 Bridge to Kubernetes 프로세스에 권한이 제한적인 경우에는 실패합니다. 이는 리디렉션된 서비스에 대해 이름 확인을 사용하도록 설정하려면 Bridge to Kubernetes에서 호스트 파일을 수정해야 하지만 일반 사용자 계정으로부터 Bridge to Kubernetes가 실행되는 것은 불가능하기 때문입니다. 이 문제를 해결하기 위해 코드를 작성하여 하드 코드된 서비스 이름 대신 Kubernetes 서비스 환경 변수를 사용할 수 있습니다.
환경 변수 테이블
다음 테이블에서는 포트에서 TCP 프로토콜을 사용하는 예제 서비스에 대한 클러스터의 모든 서비스에서 사용할 수 있는 Kubernetes 서비스 환경 변수를 보여 줍니다. servicename은 서비스 이름으로, 대문자로 변환되고, 하이픈은 밑줄로 변환됩니다. 예를 들어, web-api라는 서비스는 WEB_API_SERVICE_HOST라는 환경 변수를 생성합니다.
속성 | 예제 | 설명 |
---|---|---|
servicename_SERVICE_HOST | 10.0.0.11 | 서비스 호스트의 이름 |
servicename_SERVICE_PORT | 6379 | 서비스에 대한 포트 |
servicename_PORT | tcp://10.0.0.11:6379 | 프로토콜, IP 주소 및 포트를 포함하는 URL |
servicename_PORT_portnumber_protocol | tcp://10.0.0.11:6379 | 프로토콜, IP 주소 및 포트를 포함하는 URL |
servicename_PORT_portnumber_protocol_PROTO | tcp | 프로토콜 식별자. |
servicename_PORT_portnumber_protocol_PORT | 6379 | TCP에 대한 포트 번호. |
servicename_PORT_portnumber_protocol_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();
});
환경 변수를 사용하도록 코드를 업데이트하려면 호스트 이름의 발생을 찾고 환경 변수 servicename_SERVICE_HOST에서 가져온 값을 사용하도록 업데이트합니다.
일반적으로 호출 시 대상 서비스에서 사용하는 포트를 지정하지 않는 경우에도 servicename_SERVICE_PORT 환경 변수를 사용해야 합니다. 포트를 지정하면 개발 컴퓨터에서 특정 포트를 사용할 수 없을 때 Bridge to Kubernetes가 충돌을 방지할 수 있습니다. 이를 위해 서비스가 수신 대기하는 포트를 변경할 필요가 없습니다. 서비스가 다른 서비스를 호출할 때 servicename_SERVICE_HOST 및 servicename_SERVICE_PORT 환경 변수 모두를 사용하여 호출하도록 해야 합니다.
클러스터의 다른 위치에서 동일한 코드를 다시 사용하는 경우 이러한 환경 변수는 클러스터의 모든 Pod에서 사용할 수 있으므로 괜찮습니다. Kubernetes 클러스터 외부에서 동일한 코드를 다시 사용하는 경우 동일한 환경 변수를 설정하거나 새 플랫폼 또는 호스팅 서비스에 맞춰 코드를 적절하게 수정해야 합니다.
Kubernetes 서비스 환경 변수를 사용하도록 VS Code 설정
원격 컴퓨터에서 VS Code를 사용하거나 비 관리자로 VS Code를 실행하는 경우에도 Kubernetes 서비스 환경 변수를 사용하도록 VS Code를 구성해야 합니다. 다음 코드에 표시된 것처럼 tasks.json을 열고, 레이블이 bridge-to-kubernetes.service
인 작업을 찾고 값이 true
인 usekubernetesServiceEnvironmentVariables
속성을 추가합니다.
"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
인 작업을 찾고 값이 true
인 useKubeServiceEnvironmentVariables
속성을 추가합니다.
"Bridge to Kubernetes": {
"commandName": "AzureDevSpacesLocal",
"launchBrowser": true,
"useKubeServiceEnvironmentVariables": true
}
설정은 비 관리자로 VS Code또는 Visual Studio를 실행하는 경우에만 필요합니다. 또는 원격 세션을 사용하지만 이 문서에서 설명하는 것과 같이 코드를 수정한 경우 이 속성을 설정하는 데 나쁜 영향을 주지 않습니다.
다음 단계
Bridge to Kubernetes 구성 방법에서 Bridge to Kubernetes 구성에 대해 자세히 알아보세요.