#kubernetes #load-balancing #minikube
#kubernetes #балансировка нагрузки #minikube
Вопрос:
Я пытаюсь научиться использовать Kibernetes с Minikube и выполнить следующее развертывание и сервис:
---
kind: Service
apiVersion: v1
metadata:
name: exampleservice
spec:
selector:
app: myapp
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8081
# Port to forward to inside the pod
targetPort: 8080
# Port accessible outside cluster
nodePort: 30002
type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myappdeployment
spec:
replicas: 5
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: tutum/hello-world
ports:
- containerPort: 8080
Я ожидаю, что смогу подключиться к этой службе со своего локального компьютера по
http://192.168.64.2:30002
Согласно команде: minikube service exampleservice --url
но когда я пытаюсь получить доступ к этому из браузера, я получаю сообщение об ошибке «сайт недоступен».
Некоторая информация, которая может помочь в отладке:
kubectl get services --all-namespaces
:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default exampleservice LoadBalancer 10.104.248.158 <pending> 8081:30002/TCP 26m
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2h
default user-service-service LoadBalancer 10.110.181.202 <pending> 8080:30001/TCP 42m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 2h
kube-system kubernetes-dashboard ClusterIP 10.110.65.24 <none> 80/TCP 2h
Я запускаю minikube на OSX.
Ответ №1:
Вы можете использовать внешние IP-адреса, как описано в документах k8s. Обновите службу, как показано ниже (где, как я предполагаю 192.168.64.2
, находится ваш IP-адрес minikube).:
kind: Service
apiVersion: v1
metadata:
name: exampleservice
spec:
selector:
app: myapp
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8081
# Port to forward to inside the pod
targetPort: 80
# Port accessible outside cluster
nodePort: 30002
type: LoadBalancer
externalIPs:
- 192.168.64.2
Теперь вы можете получить доступ к своему приложению по адресуhttp://192.168.64.2:8081 /
Если вам нужно получить доступ к приложению на 30002, вы можете использовать его следующим образом
kind: Service
apiVersion: v1
metadata:
name: exampleservice
spec:
selector:
app: myapp
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8081
# Port to forward to inside the pod
targetPort: 80
# Port accessible outside cluster
nodePort: 30002
type: NodePort
Мне кажется, что ваш файл развертывания не соответствует действительности.
удалите ее kubectl delete deploy/myappdeployment
используйте это для повторного создания.
apiVersion: apps/v1beta1
kind: Deployment
metadata:
labels:
app: myapp
name: myappdeployment
spec:
replicas: 5
selector:
matchLabels:
app: myapp
strategy: {}
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: tutum/hello-world
name: myapp
ports:
- containerPort: 80
Ответ №2:
ПРИМЕЧАНИЕ: Minikube поддерживает службы балансировки нагрузки (через minikube tunnel
)
вы можете получить IP-адрес и порт, через которые вы можете получить доступ к службе, выполнив
minikube service kubia-http #=> To open a browser with an IP and port
или
minikube service kubia --url #=> To get the IP and port in the terminal