Alibaba Cloud Container Compute Service (ACS) kümeleri DNS çözümlemesi için CoreDNS kullanır. Bu konu, bir küme içinde DNS'in nasıl çalıştığını ve iş yükü gereksinimlerinize uygun şekilde dnsPolicy parametresini nasıl yapılandıracağınızı açıklar.
Kümenizde DNS çözümlemesini etkinleştirin
ACS kümelerinde DNS çözümlemesi varsayılan olarak etkin değildir. Etkinleştirmek için kümeyi oluştururken CoreDNS'i seçin. CoreDNS, küme içinde kube-system ad alanında kube-dns adlı bir hizmet olarak sunulur.
kube-dns hizmetini kontrol etmek için aşağıdaki komutu çalıştırın:
kubectl get svc kube-dns -n kube-system
Beklenen çıktı:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 172.24.0.10 <none> 53/UDP,53/TCP,9153/TCP 27d
CoreDNS etkin bir ACS kümesi oluşturma hakkında daha fazla bilgi için bkz. ACS kümesi oluşturun.
ACS kümelerinde DNS çözümlemesi nasıl çalışır?
Bir Pod başlatıldığında kubelet, iki parametre kullanarak DNS ayarlarını yapılandırır:
--cluster-dns=<dns-service-ip>: Küme DNS sunucusunun IP adresi--cluster-domain=<default-local-domain>: Temel etki alanı adı soneki
Bu parametreler, her Pod içindeki /etc/resolv.conf dosyasının içeriğini belirler:
nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
| Parametre | Açıklama |
|---|---|
nameserver |
DNS sunucusunun IP adresi. |
search |
DNS araması sırasında kısa adlara eklenen etki alanı sonekleri. ACS kümeleri üç sonek içerir (kube-system.svc.cluster.local, svc.cluster.local, cluster.local); bu nedenle tek bir arama en fazla dört DNS sorgusu üretebilir. |
options |
Anahtar-değer çiftleri olarak belirtilen ek çözücü seçenekleri. Varsayılan ndots:5 değeri şunu ifade eder: Bir etki alanı adı ndots değerinden daha fazla nokta içeriyorsa tam nitelikli etki alanı adı (FQDN) olarak kabul edilir ve doğrudan çözülür; daha az nokta içeriyorsa önce search sonekleri eklenir. |
DNS ilkesi seçin
Pod'un etki alanı adlarını nasıl çözeceğini denetlemek için Pod tanımında dnsPolicy ayarlayın. ACS kümeleri aşağıdaki ilkeleri destekler:
| İlke | Kullanılan DNS sunucusu | Ne zaman kullanılır? |
|---|---|---|
ClusterFirst |
CoreDNS (kube-dns) |
Kümedeki diğer hizmetlere erişmesi gereken Pod'lar için. Bu varsayılan davranıştır. |
None |
dnsConfig ile tanımlanan |
Tamamen özel DNS ayarları gerektiren Pod'lar için. |
Default |
Düğümün /etc/resolv.conf dosyası (Alibaba Cloud DNS) |
Küme içi hizmetlere erişmeyen Pod'lar için. |
Defaultvarsayılan DNS ilkesi değildir.dnsPolicybelirtilmezseClusterFirstkullanılır.
Küme içi etki alanı adlarını çözmek için CoreDNS kullanın
Kümedeki diğer hizmetlerle iletişim kuran Pod'lar için dnsPolicy: ClusterFirst ayarlayın. Bu, ACS iş yükleri için varsayılan davranıştır.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: ClusterFirst
Bir Pod için DNS ayarlarını özelleştirin
Bir Pod için DNS ayarlarını tamamen kontrol etmek üzere dnsPolicy: None ayarlayın ve bir dnsConfig bloğu sağlayın. dnsPolicy değeri None olduğunda dnsConfig içinde en az bir ad sunucusu belirtilmelidir.
dnsConfig isteğe bağlıdır ve yalnızca None ile değil, herhangi bir dnsPolicy ile birlikte kullanılabilir. Mevcut ayarların üzerine ek ad sunucuları veya arama etki alanları eklemek için diğer ilkelerle birlikte kullanın.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: None
dnsConfig:
nameservers: ["169.254.xx.xx"]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "2"
Pod başlatıldığında yukarıdaki yapılandırma aşağıdaki /etc/resolv.conf dosyasını oluşturur:
nameserver 169.254.xx.xx
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:2
Aşağıdaki tabloda dnsConfig alanları açıklanmaktadır:
| Alan | Açıklama |
|---|---|
nameservers |
Pod için DNS sunucusu IP adreslerinin listesi. En fazla üç IP adresine izin verilir. dnsPolicy değeri None olduğunda en az bir adres belirtilmelidir. Yinelenen adresler kaldırılır. |
searches |
Ana bilgisayar adı aramaları için DNS arama etki alanlarının listesi. En fazla altı etki alanına izin verilir. Bu liste, DNS ilkesinden türetilen temel listeye eklenir. Yinelenen etki alanları kaldırılır. |
options |
Her biri zorunlu bir name ve isteğe bağlı bir value içeren çözücü seçeneklerinin listesi. Bu seçenekler, DNS ilkesi tarafından oluşturulan seçeneklerle birleştirilir. Yinelenen öğeler kaldırılır. |
CoreDNS olmadan düğüm düzeyinde DNS kullanın
Pod'larınız ACS kümesindeki hiçbir hizmete erişmiyorsa dnsPolicy: Default ayarlayın. DNS çözümlemesi, düğümün /etc/resolv.conf dosyasını kullanan Alibaba Cloud DNS tarafından gerçekleştirilir ve CoreDNS devreye girmez.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: Default
Statik ana bilgisayar adlarını IP adresleriyle eşleyin
Belirli bir Pod için statik ana bilgisayar adı-IP eşlemeleri eklemek amacıyla Pod tanımına hostAliases alanını ekleyin. Kubelet, Pod'un /etc/hosts dosyasını yönetir ve bu girdileri başlangıçta yazar.
Çalışan bir konteyner içindeki /etc/hosts dosyasını manuel olarak düzenlemeyin. Kubelet, bir konteyner yeniden başlatıldığında dosyanın üzerine yazar; bu nedenle manuel değişiklikler kaybolur.
Statik eşlemeleri tek bir Pod yerine kümedeki tüm Pod'lara uygulamak için CoreDNS hosts eklentisini etkinleştirin. Bkz. CoreDNS uzantılarını yapılandırın.
Aşağıdaki örnekte foo.local, bar.local ve foo.remote statik IP adreslerine eşlenir:
apiVersion: v1
kind: Pod
metadata:
name: hostaliases-pod
spec:
hostAliases:
- ip: "127.0.**.**"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.**.**"
hostnames:
- "foo.remote"
containers:
- name: cat-hosts
image: busybox:1.28
command:
- cat
args:
- "/etc/hosts"
Pod başlatıldıktan sonra /etc/hosts dosyası şu içeriği barındırır:
# Kubernetes-managed hosts file.
127.0.**.** localhost
10.200.**.** hostaliases-pod
# Entries added by HostAliases.
127.0.**.** foo.local bar.local
10.1.**.** foo.remote bar.remote