Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

1. docker.serviceファイルを編集する

: : vi /usr/lib/systemd/system/docker.service を実行します。

[Service]ノードを見つけて、ExecStartプロパティを変更し、 -H tcp://0.0.0.0:2375を追加します。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

これはポート2375を外部に開放するのと同じです。もちろん、自分の状況に応じて他のポートに変更することもできます。

2. Docker設定をリロードして有効にする

systemctlデーモンリロード
systemctl dockerを再起動します

ブラウザから2375にアクセスしてテストします。形式は次のとおりです: http://ip:2375/version

アクセスできない場合は、ファイアウォールのポート 2375 を開いてみてください。具体的なコマンドは次のとおりです。

ファイアウォールコマンド --zone=public --add-port=2375/tcp --permanent
ファイアウォール-cmd --reload

それでもアクセスできない場合は、使用しているマシンが Alibaba Cloud、Tencent Cloud などのクラウド サーバーである場合は、サーバーのセキュリティ グループ ルールでポート 2375 が開いているかどうかを確認する必要があります。開いていない場合は、ポート構成を追加します。

このようにして、Idea の Docker プラグインのテストに直接接続できます。

3. Dockerのセキュアアクセスを構成する

上記の 2 つの手順は、本番環境では使用しないでください。開発環境で使う分には問題ありません。このようにDockerを直接外部に公開すると、パスワードを設定せずにRedisを外部に公開するのと同じように、非常に危険です。

基本的に、インターネット上の多くの記事は、上記の 2 つの手順、裸の手順のようなものです...よく考えてください、よく考えてください、あなたでなければ、誰がハッキングされるのでしょうか?

実際、公式ドキュメントでは、CA 証明書に基づく暗号化方式がすでに提供されています。詳細については、ここをクリックしてください。

1. CA秘密鍵とCA公開鍵を作成する

まず、秘密鍵と公開鍵を保存するためのcaフォルダを作成します。

mkdir -p /usr/local/ca
/usr/local/ca をコピー

次に、 Docker デーモンのホスト上で、CA 秘密鍵と公開鍵を生成します。

openssl genrsa -aes256 -out ca-key.pem 4096

上記の手順を実行すると、次のステップに進む前にパスワードの入力を求められます。ここではパスワードを niceyoo に設定しました。

2. CA証明書情報を入力する

次のコマンドを実行します。

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

次に、アクセス パスワード、国、都道府県、市区町村、組織名、部署名、任意の名前、電子メール アドレスなどを順番に入力します。時間を節約するために、組織やユニットなどの代わりに niceyoo を使用します。

niceyoo cn 北京 北京 niceyoo niceyoo niceyoo [email protected]

この時点で、CA 証明書が作成されています。CA を使用すると、サーバー キーと証明書署名要求 (CSR) を作成し、「共通名」が Docker への接続時に使用するホスト名と一致することを確認できます。

3. server-key.pemを生成する

openssl genrsa -out サーバーキー.pem 4096

4. CAで公開鍵に署名する

TLS 接続は IP アドレスと DNS 名の両方を介して確立できるため、証明書を作成するときに IP アドレスを指定する必要があります。たとえば、 10.211.55.4使用した接続を許可するには、次のようにします。

openssl req -subj "/CN=10.211.55.4" -sha256 -new -key server-key.pem -out server.csr

URL (例: www.sscai.club) を使用している場合は、次のように置き換えてください:

openssl req -subj "/CN=www.sscai.club" -sha256 -new -key server-key.pem -out server.csr

注: ここで言及されている IP またはドメイン名は、将来的に外部目的で使用されるアドレスを指します。

5. 一致するホワイトリスト

ホワイトリストを設定することの意義は、どの IP アドレスが Docker にリモート接続できるかを許可することです。これを行うには 2 つの方法がありますが、5.2 の手順 2 を実行するだけで済みます。

5.1. 指定された IP がサーバー内の Docker に接続できるようにします。複数の IP はカンマで区切られます。

外部 Docker アドレスが IP アドレスの場合、コマンドは次のようになります。

echo subjectAltName = DNS:$HOST、IP:XX.XX.XX.XX、IP:XX.XX.XX.XX >> extfile.cnf

使用する場合、外部に公開する Docker リンクが IP アドレスか URL かに応じて、 $HOST独自の IP アドレスまたは URL に置き換えます。

# サーバー 10.211.55.4 上の Docker は、IP アドレス 221.217.177.151 のクライアントのみ接続を許可します echo subjectAltName = DNS:10.211.55.4,IP:221.217.177.151 >> extfile.cnf

# www.sscai.club サーバー上の Docker は、IP アドレス 221.217.177.151 および 127.0.0.1 を持つクライアントのみ接続を許可します echo subjectAltName = DNS:www.sscai.club,IP:221.217.177.151,IP:127.0.0.1 >> extfile.cnf

5.2. すべての IP が接続できるように 0.0.0.0 を設定します (ただし、永続的な証明書を持つ IP のみが正常に接続できます)

echo subjectAltName = DNS:10.211.55.4,IP:0.0.0.0 >> extfile.cnf

6. コマンドを実行する

Docker デーモン キーの拡張使用プロパティをサーバー認証にのみ使用するように設定します。

echo 拡張キー使用法 = serverAuth >> extfile.cnf

7. 署名整数を生成する

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf

実行後、上記で設定したパスワードを入力する必要があります

8. クライアントキー.pemを生成する

openssl genrsa -out キー.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

9. クライアント認証に適したキーを作成する

拡張機能構成ファイルを作成します。

echo 拡張キー使用法 = clientAuth >> extfile.cnf
echo 拡張キー使用法 = clientAuth > extfile-client.cnf

10. 署名整数を生成する

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf

cert.pem を生成するには、以前に設定したパスワードを再度入力する必要があります: niceyoo

11. 不要なファイルと2つの整数署名要求を削除する

cert.pemserver-cert.pemを生成したら、証明書署名要求と拡張構成ファイルの両方を安全に削除できます。

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

12. 変更可能な権限

キーが誤って破損するのを防ぐには、書き込み権限を削除します。読み取り専用にするには、ファイル モードを次のように変更します。

chmod -v 0400 ca-key.pem key.pem server-key.pem

証明書は、偶発的な破損を防ぐために書き込み権限を削除して、公開読み取り可能にすることができます。

chmod -v 0444 ca.pem server-cert.pem cert.pem

13. サーバー証明書を収集する

cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

14. Docker構成を変更する

DockerデーモンがCAによって信頼された証明書を提示するクライアントからの接続のみを受け入れるようにする

vim /lib/systemd/system/docker.service

ExecStartプロパティの値を置き換えます。

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

15.デーモンをリロードしてdockerを再起動する

systemctlデーモンリロード

systemctl dockerを再起動します

IDEA の docker モジュールで確認し、以前の接続を見てみましょう。

当然、接続は不可能です。このとき、docker ホストによって作成された証明書を取得し、その証明書を使用して接続する必要があります。

これら 4 つの証明書ファイルをローカル フォルダーにプルします。このフォルダーは、アイデアを指定するために使用されます。TCP のリンクを Https 形式に変更する必要があることに注意してください。具体的な内容は、次の図に示されています。

要約する

これで、Docker でリモート セキュア アクセスを有効にする方法についての詳細なグラフィック チュートリアルに関するこの記事は終了です。Docker リモート アクセスの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法
  • 独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法
  • Centos Docker ブリッジ モードでホスト Redis サービスにアクセスできないというトラブルシューティングの経験
  • Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明
  • dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明
  • Dockerでローカルマシン(ホストマシン)にアクセスする方法
  • Dockerコンテナを使用してホストネットワークにアクセスする方法
  • 実行後にdocker nginxにアクセスできない問題の解決策
  • Dockerコンテナ内の独立IPにアクセスする方法
  • Dockerコンテナ間で通信する3つの方法

<<:  ユーザー名が使用可能かどうかを確認するVueメソッド

>>:  mysql トリガーの作成と使用例

推薦する

MySQLインデックスの基本構文

インデックスはソートされたデータ構造です。 where 条件での検索や order by 条件での並...

Docker-compose インストール yml ファイルの設定方法

目次1. オフラインインストール2. オンラインインストール3. アンインストール4. ymlファイ...

202 無料の高品質 XHTML テンプレート (2)

前回の記事「202 個の無料高品質 XHTML テンプレート (1)」に続き、123WORDPRES...

ZooKeeper をベースにした Hadoop 高可用性クラスタの構築のチュートリアル図

目次1. 高可用性の概要1.1 可用性の高い全体アーキテクチャ1.2 QJMに基づく共有ストレージシ...

有名なウェブサイトのロゴに使われている25種類のフォントのコレクション

この記事では、25 の有名な Web サイト (Google、Yahoo、Twitter、Digg ...

iframe 適応サイズ実装コード

ページドメインの関係:メインページ a.html はドメイン A: www.jb51.net に属し...

njs モジュールを使用して nginx 構成に js スクリプトを導入する

目次序文1. NJSモジュールをインストールする方法1: NJSモジュールを動的にロードする方法2:...

MySQLサブクエリでorder byが効かない問題の解決方法

偶然にも、SQL ステートメントを異なる MySQL インスタンスで実行すると、異なる結果が生成され...

CSS のフローティング サンプル コードをクリアする方法

概要この記事のフレームワーク図は次のとおりです。 1. フローティングとは一体何でしょうか? W3s...

Vueコンポーネントのルーティング強調表示問題の解決策

序文以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリック...

moment.jsの時間と日付の処理の詳細な説明

月曜日から日曜日の時間形式の変換(Y --- 年 M --- 月 D--- 日) : : : : :...

Vue でルーティング遷移効果を実装する 4 つの方法

Vue ルーター トランジションは、Vue プログラムにパーソナライズされたエフェクトをすばやく簡単...

コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?

無料ポイントインタビュアー:Linuxを使ったことはありますか?私:はいインタビュアー:メモリ使用量...

Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション

1 はじめに「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記...

Vueアイコンセレクターのサンプルコード

出典: http://www.ruoyi.vip/ 'vue' から Vue をイン...