Kubernetes'te Kapsayıcı bağlantı noktası ile hedef bağlantı noktası arasındaki fark nedir?
Nasıl container port
farklı targetports
Kubernetes bir kapta? Birbirlerinin yerine kullanılıyorlar mı, öyleyse neden?
Kubernetes'teki bir bölmeyi containerPort
belirtmek için kullanılan aşağıdaki kod parçacığına port
rastladım.
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
labels:
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: postgres-pod
app: demo-voting-app
template:
metadata:
name: postgres-pod
labels:
name: postgres-pod
app: demo-voting-app
spec:
containers:
- name: postgres
image: postgres:9.4
ports:
- containerPort: 5432
Yukarıdaki kod parçacığında containerPort
parametre için 5432 vermişlerdir (son satırda). Peki, bu nasıl containerPort
farklı targetport
?
Bildiğim kadarıyla, terim port
genel port
olarak service
(Kubernetes) 'e atıfta bulunuyor . Hatalıysam düzeltin.
Yanıtlar
Özetle: targetPort
ve containerPort
temelde aynı bağlantı noktasına atıfta bulunun (yani her ikisi de kullanılırsa aynı değere sahip olmaları beklenir) ancak iki farklı bağlamda kullanılırlar ve tamamen farklı amaçlara sahiptirler.
Her ikisi de iki farklı kubernetes kaynağının / nesnesinin spesifikasyonunun parçaları olduğu için birbirleri arasında kullanılamazlar: Service
ve Pod
sırasıyla. Amacı containerPort
tamamen bilgilendirme amaçlı olarak ele alınabilse de, bir dizi ortaya çıkaran için targetPort
gereklidir .Service
Pods
/ Belirtiminizdeki containerPort
belirli bir değerle beyan ederek bu belirli bağlantı noktasını açığa çıkaramayacağınızı anlamanız önemlidir; örneğin, alanda nginx'inizin varsayılan yerine bağlantı noktasını açığa çıkardığını bildirirseniz , yine de kapsayıcınızda nginx sunucunuzu yapılandırmanız gerekir. bu limanda dinlemek için.Pod
Deployment
Pod
containerPort
Pod
8080
80
Bildirilmesi containerPort
de Pod
tarifnamede isteğe bağlıdır. O olmasa bile Service
, içinde beyan ettiği bilgilere dayanarak talebi nereye yönlendireceğinizi bileceksiniz targetPort
.
O ilan etmek zorunda değil hatırlamakta fayda var targetPort
içinde Service
tanım. Atlarsanız, varsayılan olarak beyan ettiğiniz değere port
(ki bu Service
kendisinin bağlantı noktasıdır ) gelir.
Kapsül spesifikasyonunda ContainerPort
Kaptan açığa çıkacak bağlantı noktalarının listesi. Burada bir bağlantı noktasının gösterilmesi, sisteme bir konteynerin kullandığı ağ bağlantıları hakkında ek bilgi verir, ancak öncelikle bilgi amaçlıdır. Burada bir bağlantı noktası belirtmemek, bu bağlantı noktasının açığa çıkmasını ENGELLEMEZ
hizmet spesifikasyonunda targetPort
Hizmetin hedeflediği bölmelere erişilecek bağlantı noktasının numarası veya adı. Numara, 1 ile 65535 arasında olmalıdır. Ad, bir IANA_SVC_NAME olmalıdır. Bu bir dizeyse, hedef Kapsülün konteyner bağlantı noktalarında adlandırılmış bir bağlantı noktası olarak aranacaktır. Bu belirtilmezse, "bağlantı noktası" alanının değeri kullanılır (bir kimlik haritası).
Bu nedenle targetPort
hizmet içi containerPort
, kapsüldeki spesifikasyonla eşleşmelidir, çünkü hizmet, trafiğin hangi konteyner bağlantı noktasının hedef olduğunu bilir.