• Fri. Dec 9th, 2022

Kubectl Port Yönlendirme ile Uzak Kubernetes Uygulamasına Nasıl Erişilir

Byadmin

Sep 23, 2022

Kubernetes kümenizin içinde çalışan bir uygulamada hata ayıklamanız mı gerekiyor? Bağlantı noktası yönlendirme, herkese açık olmayan Kapsüllere bağlanmanın bir yoludur. Bu tekniği, genel bir rota olmadan dahili olarak dağıtmak istediğiniz veritabanlarını, izleme araçlarını ve diğer uygulamaları incelemek için kullanabilirsiniz.

Bağlantı noktası yönlendirme Kubectl’de yerleşiktir. CLI, yerel bağlantı noktalarındaki trafiği Kubernetes kümenizdeki Pod’lara yönlendiren tünel oturumları başlatabilir. Bunu nasıl kuracağınız aşağıda açıklanmıştır.

Bağlantı Noktası Yönlendirme Nasıl Çalışır?

Bağlantı noktası yönlendirme, trafiği bir ağdan diğerine yönlendiren bir tür ağ adresi çevirisi (NAT) kuralıdır. Kubernetes bağlamında, aşağıdakiler tarafından sonlandırıldığı görülen istekler localhost kümenizin dahili ağına yönlendirilir.

Bağlantı noktası yönlendirme yalnızca bağlantı noktası düzeyinde çalışır. Gibi belirli bir bağlantı noktasını yönlendirirsiniz 33060 gibi bir hedef bağlantı noktasına 3306 hedef ağda. Yerel bağlantı noktanıza trafik gönderdiğinizde 33060otomatik olarak bağlantı noktasına iletilecektir 3306 uzak uçta.

Bu teknik, NodePort, Ingress veya LoadBalancer tarafından kullanıma sunulmayan özel Kubernetes iş yüklerine erişmenizi sağlar. Dahili iş yükleriniz için Kubernetes hizmetleri oluşturma ihtiyacını ortadan kaldırarak yerel trafiği doğrudan kümenize yönlendirebilirsiniz. Bu, saldırı yüzeyinizi azaltmaya yardımcı olur.

Örnek Uygulama Dağıtma

Şimdi Kubernetes port yönlendirmesini çalışırken görelim. Bir sonraki bölümde bağlantı noktası iletmeyi kullanarak bağlanacağınız temel bir dağıtım oluşturarak başlayın.

Bu tekniği ne zaman kullanmanız gerekebileceğinin gerçekçi bir örneği olarak bir MySQL veritabanı Pod’u kullanıyoruz. Veritabanları normalde herkese açık değildir, bu nedenle Kubernetes yöneticileri doğrudan bağlantı açmak için genellikle bağlantı noktası iletmeyi kullanır.

Dağıtımınız için bir YAML dosyası oluşturun:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mysql

değerini değiştirdiğinizden emin olun. MYSQL_ROOT_PASSWORD Bu bildirimi üretimde kullanmadan önce ortam değişkeni. Koşmak kubectl apply MySQL dağıtımınızı oluşturmak için:

$ kubectl apply -f mysql.yaml
deployment.apps/mysql created

Sonraki get pods iş yükünün başarıyla başlatıldığını kontrol etme komutu:

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
mysql-5f54dd5789-t5fzc   1/1     Running   0          2s

Kubernetes’e Yönlendirmek için Kubectl’yi Kullanma

MySQL artık kümenizde çalışıyor olsa da, ona dışarıdan erişmenin hiçbir yolu yok. Ardından, aşağıdaki gibi yerel araç kurulumlarınızı kullanabilmeniz için bir bağlantı noktası yönlendirme oturumu ayarlayın. mysql Veritabanınıza bağlanmak için CLI.

İşte basit bir örnek:

$ kubectl port-forward deployment/mysql 33060:3306
Forwarding from 127.0.0.1:33060 -> 3306
Forwarding from [::1]:33060 -> 3306

33060 numaralı bağlantı noktasına yapılan bağlantılar, MySQL dağıtımınızı çalıştıran Pod’a karşı 3306 numaralı bağlantı noktasına yönlendirilecektir. Artık Kubernetes’te veritabanınızı hedefleyen bir MySQL kabuk oturumu başlatabilirsiniz:

$ mysql --host 127.0.0.1 --port 33060 -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.29 MySQL Community Server - GPL

Çalıştıran kabuk penceresini saklayın kubectl port-forward hata ayıklama oturumunuz süresince açık komut. Ctrl+C’ye bastığınızda veya pencereyi kapattığınızda bağlantı noktası iletme sonlandırılacaktır.

Yerel ve Uzak Bağlantı Noktası Numaralarını Değiştirme

Bağlantı noktası numarası bağlamalarının sözdizimi şöyledir: local:remote. bu 33060:3306 yukarıda gösterilen örnek, 33060 numaralı bağlantı noktası üzerinde haritalar localhost ile 3306 hedef Pod’da.

İki nokta üst üste olmadan yalnızca bir sayı belirtmek, onu hem yerel hem de uzak bağlantı noktası olarak yorumlayacaktır:

$ kubectl port-forward deployment/mysql 3306

Rastgele bir bağlantı noktasını otomatik olarak atamak yerine yerel bağlantı noktasını boş bırakabilirsiniz:

$ kubectl port-forward deployment/mysql :3306
Forwarding from 127.0.0.1:34923 -> 3306
Forwarding from [::1]:34923 -> 3306

Burada rastgele oluşturulmuş bağlantı noktası numarasını kullanırsınız 34923 yerel MySQL istemcinizle.

Dinleme Adresini Değiştirme

Kubectl, yerel bağlantı noktasını 127.0.0.1 (IPv4) ve ::1 (IPv6) adresleri varsayılan olarak. Bunun yerine kendi IP setinizi belirtebilirsiniz. --address çalıştırdığınızda bayrak port-forward emretmek:

# Listen on two IPv4 addresses
$ kubectl port-forward deployment/mysql :3306 --address 127.0.0.1,192.168.0.1

Bayrak yalnızca IP adreslerini kabul eder ve localhost anahtar kelime. İkincisi içerecek şekilde yorumlanır 127.0.0.1 ve ::1komutun varsayılanlarıyla eşleşen --address atlanır.

Özet

Bağlantı noktası iletme, Kubernetes kümenizdeki özel uygulamalara erişmek için kullanışlı bir tekniktir. Kubectl, yerel ağınızdan belirli bir Pod üzerindeki belirli bir bağlantı noktasına giden trafiği tüneller. Herhangi bir TCP bağlantısını işleyebilen nispeten düşük seviyeli bir mekanizmadır. UDP bağlantı noktası iletme henüz desteklenmiyor.

Geçici bağlantı noktası yönlendirme oturumu kullanmak, harici olarak gösterilmesi gerekmeyen iş yüklerinde hata ayıklamanın güvenli bir yoludur. Her yeni dağıtım için bir hizmet oluşturmak, davetsiz misafirlerin ve saldırganların korunması gereken uç noktaları keşfetmesine izin verebilir. Kubectl’deki bağlantı noktası iletme, hangi Düğümler üzerinde çalıştıklarını bulmak zorunda kalmadan uygulamalarınıza doğrudan güvenli bir şekilde bağlanmanıza olanak tanır.