このブログ投稿の例に従って、ポッドにアップストリーム DNS サーバーを提供しようとしています。
us-east1-d に新しい GKE クラスタを作成しました (ここでは、4 月 4 日のエントリによると 1.6.0 が利用可能です)。
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:36:33Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:24:30Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
次に、次の YAML ファイル kube-dns-cm.yml で ConfigMap を定義しました。
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
upstreamNameservers: |
["1.2.3.4"]
ConfigMap を作成しようとすると、既に存在すると言われます。
$ kubectl create -f kube-dns-cm.yml
Error from server (AlreadyExists): error when creating "kube-dns-cm.yml": configmaps "kube-dns" already exists
既存の ConfigMap を削除して自分のものに置き換えようとしましたが、その後 Pod を作成すると有効にならなかったようです (名前が思い通りに解決されません)。ブログ投稿で説明されている以上の話がありますか (例: kube-dns サービスまたはポッドの再起動)? ありがとう!
編集: ConfigMap の削除と再作成は実際には機能しますが、私が望んでいた方法とは完全には異なります。私の docker レジストリはプライベート (企業) ネットワーク上にあり、レジストリの名前を解決するには上流のネームサーバーが必要です。そのため、ポッドの yaml ファイルでレジストリの DNS 名を使用することはできませんが、その yaml ファイルから作成されたポッドには、必要な DNS 解決が含まれます (ConfigMap が置き換えられた後)。