組織のポリシーにより、どういうわけかインターネット接続ができないKubernetesクラスターをセットアップしました。今、私はインターネットを介して通信する必要があるいくつかのサービスがあります。これを解決するために、K8sクラスターの外部にあるフォワードプロキシ(Squid)をセットアップしました。 K8sクラスターのすべてのノードは、フォワードプロキシを使用して「google.com」にアクセスできます。しかし、そのプロキシを介してポッドを通信させることができません。
すべてのマスターノードとワーカーノードで次の変数を設定しました。
export http_proxy="http://10.x.x.x:3128"
export https_proxy="https://10.x.x.x:3128"
マスターノードとワーカーノードからgoogle.comをカールできます。しかし、コンテナにアタッチすると、変数http_proxyとhttps_proxyがないことに気づきました。そしてそれは成功したカールを行うことができません。
私のポッドとサービスネットワークは、私のVM networkとは異なります
pod-network-cidr=192.167.0.0/16
service-cidr 192.168.0.0/16
そして私のVMネットワークは次のようなものです:
Master -> 10.2.2.40
Worker1 -> 10.2.2.41
Worker2 -> 10.2.2.42
Worker3 -> 10.2.2.43
そして私のフォワードプロキシは
Forward Proxy: 10.5.2.30
私はkubernetesバージョンv1.11.2を使用しています。すべてのポッドとサービスに対してそれを有効にするために、kubernetesクラスターのhttp_proxy設定をどこに配置する必要があるかなど、ここで何か助けはありますか?
したがって、特定のコンテナーのプロキシーを設定するには、Dockerfileでenv変数を設定することがわかりました。
ENV HTTP_PROXY http://10.x.x.x:PORT
Dockerサービスには、systemd設定ファイルを使用します。
ファイルを作成します。
/etc/systemd/system/docker.service.d/http-proxy.conf
内容:
[Service]
Environment="HTTP_PROXY=http://10.x.x.x:3128"
Environment="HTTPS_PROXY=http://10.x.x.x:3128"
(NO_PROXY変数を含めることもできます)
Systemctlをリロードしてdockerサービスを再起動する必要があります:
systemctl daemon-reload
systemctl restart docker
コンテナーがプロキシーに接続できるようにするには、mk_staが言ったように/etc/default/docker
または/etc/sysconfig/docker
を使用します。
あなたは付け加えられます http_proxy
ネストされたポッドコンテナからターゲットプロキシサーバーを介してパケットを転送するために、Dockerマシンに設定します。
Ubuntuベースのオペレーティングシステムの場合:
追加 export http_proxy='http://<Host>:<port>'
ファイルに記録/etc/default/docker
Centosベースのオペレーティングシステムの場合:
追加 export http_proxy='http://<Host>:<port>'
ファイルに記録/etc/sysconfig/docker
その後、Dockerサービスを再起動します。