OpenShiftのコンテナ/PodはIPv4プロトコルでデータを転送するため、通常はIPv6の設定を気にする必要はありません。しかし、場合によっては他のコンテナ/PodやホストOSに影響を与えず、コンテナ内だけでIPv6を無効化したいことがあります。
以下は、コンテナから出力されたIPv6情報の例です。
|
|
セキュリティ上の理由から、コンテナ内で sysctl -w
を実行してカーネルパラメータを変更することはできません。
|
|
そのため、DeploymentConfigのKubernetes設定を変更する必要があります。Sysctl設定はKubernetes経由で公開されており、ユーザーはコンテナ内の名前空間ごとに特定のカーネルパラメータをランタイムで変更できます。名前空間化されたsysctlのみがPodごとに個別に設定可能です。 名前空間化されたsysctlについてはこちらを参照してください。
手順は以下の通りです:
/etc/origin/node/node-config.yaml
の kubeletArguments フィールドに以下を追加し、Unsafe Sysctlsを有効化します。1 2 3
kubeletArguments: experimental-allowed-unsafe-sysctls: - net.ipv6.conf.all.disable_ipv6
ノードサービスを再起動して設定を反映させます:
1
systemctl restart atomic-openshift-node
対象PodのDeploymentConfigを編集します。
1
oc edit dc/<対象PodのDeploymentConfig名>
templateフィールド内のmetadataに以下を追加し、保存して終了します(annotationsフィールドがなければ作成してください)。
1 2 3 4 5 6
spec: .... template: metadata: annotations: security.alpha.kubernetes.io/unsafe-sysctls: net.ipv6.conf.all.disable_ipv6=1
この更新済みDeploymentConfigで新しいコンテナ/Podをデプロイします。
1
oc deploy dc/<対象PodのDeploymentConfig名> --latest
Podが起動したら、IPv6が無効化されていることを確認します。
1 2 3 4 5 6 7 8 9
[root@ocp37 ~]# oc exec django-ex-2-22znd -- ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 3: eth0@if41: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP link/ether 0a:58:0a:80:00:20 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.128.0.32/23 brd 10.128.1.255 scope global eth0 valid_lft forever preferred_lft forever