Saya mencoba menggunakan nginx di kubernetes, versi kubernetes v1.5.2, saya telah menggunakan nginx dengan 3 replika, file YAML di bawah,
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-example
spec:
replicas: 3
revisionHistoryLimit: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
dan sekarang saya ingin mengekspos port 80 pada port 30062 node, untuk itu saya membuat layanan di bawah ini,
kind: Service
apiVersion: v1
metadata:
name: nginx-ils-service
spec:
ports:
- name: http
port: 80
nodePort: 30062
selector:
app: nginx
type: LoadBalancer
layanan ini berfungsi dengan baik sebagaimana mestinya, tetapi ditampilkan sebagai tertunda tidak hanya pada kubernetes dasbor juga pada terminal.
jadi tolong bantu saya untuk mengatasi masalah ini. Terima kasih ...
sumber
LoadBalancer
sebagai jenis layanan yang merupakan jenis layanan yang valid.NodePort
daningress
apakah ada cara lain untuk melakukannya tetapi tidak benar-benar menyelesaikan masalah, bukan?LoadBalancer
?Jika Anda menggunakan Minikube, ada perintah ajaib!
Semoga seseorang dapat menghemat beberapa menit dengan ini.
Tautan referensi https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel
sumber
minikube tunnel
dan itu benar-benar menyelesaikanpending
masalah, tetapi kemudian IP eksternal baru tidak berfungsi: Saya mendapatkan kesalahan batas waktu ...Jika Anda tidak menggunakan GCE atau EKS (Anda menggunakan
kubeadm
), Anda dapat menambahkanexternalIPs
spesifikasi ke layanan Anda YAML. Anda dapat menggunakan IP yang terkait dengan antarmuka utama simpul Anda sepertieth0
. Anda kemudian dapat mengakses layanan secara eksternal, menggunakan IP eksternal dari node.sumber
Untuk mengakses layanan aktif
minikube
, Anda perlu menjalankan perintah berikut:Informasi lebih lanjut di sini: Minikube GitHub
sumber
Saya membuat satu simpul node k8s menggunakan kubeadm. Ketika saya mencoba PortForward dan kubectl proxy , itu menunjukkan IP eksternal sebagai pending.
Dalam kasus saya, saya telah memperbaiki layanan seperti ini:
Setelah ini, mulai melayani IP publik
sumber
Jika berjalan di minikube , jangan lupa menyebutkan namespace jika Anda tidak menggunakan default.
layanan minikube << service_name >> --url --namespace = << namespace_name >>
sumber
Jika Anda menggunakan minikube kemudian jalankan perintah di bawah ini dari terminal,
sumber
masalah yang sama:
Namun demikian, dapat diakses melalui http://192.168.99.100:30454 itu .
sumber
Mengikuti jawaban Javier. Saya telah memutuskan untuk pergi dengan "menambal IP eksternal" untuk penyeimbang beban saya.
Ini akan menggantikan 'pending' itu dengan alamat IP baru yang ditambal yang dapat Anda gunakan untuk cluster Anda.
Untuk lebih lanjut tentang ini. Silakan lihat posting karthik tentang dukungan LoadBalancer dengan Minikube untuk Kubernetes
Bukan cara terbersih untuk melakukannya. Saya membutuhkan solusi sementara. Semoga ini bisa membantu seseorang.
sumber
Gunakan NodePort:
kubectl jalankan user-login --replicas = 2 --labels = "run = user-login" --image = kingslayerr / teamproject: version2 --port = 5000
kubectl memperlihatkan penyebaran pengguna-masuk --type = NodePort --name = pengguna-masuk-layanan
kubectl menggambarkan layanan pengguna-masuk-layanan (Catat port)
kubect cluster-info (IP-> Get The IP where master running)
Layanan Anda dapat diakses di (IP) :( port)
sumber
Saat menggunakan Minikube, Anda bisa mendapatkan IP dan port yang melaluinya Anda dapat mengakses layanan dengan menjalankan layanan minikube kubia-http.
sumber
Jika Anda tidak menggunakan cloud yang didukung (aws, azure, gcloud dll.), Anda tidak dapat menggunakan LoadBalancer tanpa MetalLB https://metallb.universe.tf/ tetapi masih dalam versi beta ..
sumber
LoadBalancer ServiceType hanya akan berfungsi jika infrastruktur yang mendasarinya mendukung pembuatan Load Balancers otomatis dan mendapatkan masing-masing dukungan di Kubernetes, seperti halnya dengan Google Cloud Platform dan AWS. Jika tidak ada fitur yang dikonfigurasi, bidang alamat IP LoadBalancer tidak terisi dan masih dalam status menunggu, dan Layanan akan bekerja dengan cara yang sama seperti Layanan jenis NodePort
sumber
Anda dapat menambal IP Node tempat pod di-host (Private IP of Node), ini adalah solusi yang mudah.
Mengambil referensi dengan posting di atas, Berikut bekerja untuk saya:
kubectl layanan patch my-loadbalancer-service-name \ -n lb-service-namespace \ -p '{"spec": {"type": "LoadBalancer", "externalIPs": ["xxx.xxx.xxx.xxx Pribadi IP Server Fisik - Node - tempat penerapan dilakukan "]}} '
sumber
hapus layanan yang ada dan buat layanan baru yang sama menyelesaikan masalah saya. Masalah saya adalah bahwa load balancing yang didefinisikan oleh IP I digunakan sehingga titik akhir eksternal sedang menunggu. Ketika saya mengubah IP penyeimbangan beban baru, masih tidak berfungsi. Akhirnya, hapus layanan yang ada dan buat yang baru memecahkan masalah saya.
sumber
Periksa log kube-controller. Saya bisa mengatasi masalah ini dengan mengatur tag clusterID ke contoh EC2 saya menggunakan cluster.
sumber
Jika itu adalah cluster k8s pribadi Anda, MetalLB akan lebih cocok. Berikut langkah-langkahnya.
Langkah 1: Instal MetalLB di cluster Anda
Langkah 2: Konfigurasikan dengan menggunakan configmap
Langkah 3: Buat layanan Anda untuk mendapatkan IP eksternal (akan menjadi IP pribadi).
FYR:
Sebelum instalasi MetalLB:
Setelah instalasi MetalLB:
sumber
Menambahkan solusi untuk mereka yang mengalami kesalahan ini saat berjalan amazon-eks.
Pertama-tama dijalankan:
Dan kemudian tinjau
events
bidang dalam contoh output di bawah ini:Tinjau pesan kesalahan:
Dalam kasus saya, alasan tidak ada subnet yang cocok untuk membuat ELB adalah:
1: Cluster EKS digunakan pada grup subnet yang salah - subnet internal dan bukan menghadap publik.
(*) Secara default, layanan tipe
LoadBalancer
membuat penyeimbang beban yang menghadap publik jika tidak adaservice.beta.kubernetes.io/aws-load-balancer-internal: "true"
anotasi yang diberikan).2: Subnet tidak ditandai sesuai dengan persyaratan yang disebutkan di sini .
Memberi tag VPC dengan:
Memberi tag pada subnet publik dengan:
sumber