나는쿠버네티스클러스터 운영애플리케이션(현재 로컬 서버의 Vagrant CoreOS VM 세트에 있음)
내 노트북에서 로컬로 특정 애플리케이션을 디버깅할 수 있기를 원했기 때문에 클러스터에 VPN을 설정하는 작업을 했습니다.클라이언트/서버 VPN을 기반으로 kylemanna/docker-openvpn
일반 배포로현물 상환 지불
인증서/키 쌍, 클라이언트 인증서 등을 만들었습니다. VPN에 연결할 수 있습니다.
이제 서비스에 액세스할 수 없으면 VPN 서버에 연결해도 별 소용이 없습니다. 클러스터에서 skyDNS의 DNS 플러그인을 실행하고 있습니다. 클러스터의 다른 포드에서 서비스를 가져올 수 있으므로 nslookup
모든 것이 잘 작동하지만 VPN 클라이언트에서 이름으로 서비스를 확인할 수 없습니다. VPN 클라이언트(서브넷)에서 10.2.0.0/16
IP로 포드를 핑할 수 있지만 DNS를 사용하여 확인할 수 없습니다.
a클라이언트로부터의 반품 nslookup
:
nslookup myservice 10.3.0.10
Server: 10.3.0.10
Address: 10.3.0.10#53
** server can't find myservice: SERVFAIL
문제 해결의 문제 중 하나는 DNS IP(모든 포드의) ping
에서 작동하지 않지만 서비스를 해결한다는 것입니다. 이것이 제가 확인하는 방법이지만 많은 정보를 제공하지 않습니다.traceroute
nslookup
Pod가 바인딩된 VPN 호스트 IP는 192.168.10.152
Kubernetes이고, 서브넷은 10.2.0.0/16
SkyDNS이며, 서버는 다음과 같습니다.10.3.0.10
VPN 서버 서브넷은 10.8.0.0/24
VPN 서버에 있습니다. ifconfig가 다음을 제공합니다.
eth0 Link encap:Ethernet HWaddr 02:42:0A:02:16:45
inet addr:10.2.22.69 Bcast:0.0.0.0 Mask:255.255.255.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
10.2.22.69
이것도 이렇다현물 상환 지불IP 및 VPN 서버 IP는 제 생각에 10.8.0.1
게이트웨이 입니다 10.8.0.2
.
VPN 서버 Pod에서 라우팅 테이블은 다음과 같습니다.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.2.22.1 0.0.0.0 UG 0 0 0 eth0
10.2.22.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.254.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
IP를 통해 내 애플리케이션에 액세스하고 데이터를 가져올 수 있지만 서비스 IP(10.3.0.0 서브넷에 있는 프록시 IP)를 사용하면 내 애플리케이션에 액세스할 수 없습니다.
VPN 서버에 경로를 추가한 route add -net 10.3.0.0/16 gw 10.8.0.2
다음 서비스 IP를 사용하여 데이터를 가져올 수 있지만 nslookup
시간이 초과됩니다.
트래픽이 DNS에서 돌아오지 않을 수도 있다고 생각합니다. DNS 자체는 Kubernetes의 프록시 서비스이므로 복잡성이 증가합니다. 이 문제를 해결하는 방법을 모릅니다.
답변1
결국 내 구성은 다음과 같습니다.
docker run -v /etc/openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig \
-u udp://192.168.10.152:1194 \
-n 10.3.0.10 \
-n 192.168.10.1 \
-n 8.8.8.8 \
-n 75.75.75.75 \
-n 75.75.75.76 \
-s 10.8.0.0/24 \
-N \
-p "route 10.2.0.0 255.255.0.0" \
-p "route 10.3.0.0 255.255.0.0" \
-p "dhcp-option DOMAIN-SEARCH cluster.local" \
-p "dhcp-option DOMAIN-SEARCH svc.cluster.local" \
-p "dhcp-option DOMAIN-SEARCH default.svc.cluster.local"
-u
VPN 서버 주소 및 포트
-n
모든 DNS 서버에서 사용
-s
VPN 서브넷 정의(기본값은 10.2.0.0, 이미 Kubernetes에서 사용됨)
-d
NAT 비활성화
-p
클라이언트에 옵션 푸시
-N
NAT 활성화: Kubernetes에서 이 설정이 중요해 보입니다.
nslookup
검색 도메인을 클라이언트에 푸시하는 마지막 부분은 etc를 작동시키는 데 핵심입니다.
컬은 처음에는 작동하지 않지만 몇 초 후에 작동하기 시작하는 것 같습니다. 따라서 작동하지만 컬을 해결하는 데 시간이 걸립니다.
답변2
1년 전에도 같은 문제에 직면하여 kubernetes에 특정한 작업을 수행하기로 결정했습니다.https://github.com/pieterlange/kube-openvpn
(kylemanna의 openvpn docker 이미지 기반)