我正在尝试在kubernetes上部署nginx,kubernetes版本是v1.5.2,我已经部署了3个副本的nginx,YAML文件在下面,
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
现在我想在节点的端口30062上公开它的端口80,因为我在下面创建了一个服务,
kind: Service
apiVersion: v1
metadata:
name: nginx-ils-service
spec:
ports:
- name: http
port: 80
nodePort: 30062
selector:
app: nginx
type: LoadBalancer
这项服务应该是合理的,但它不仅在终端上的kubernetes仪表板上显示为待定。
所以请帮我解决这个问题。谢谢 ...
看起来您正在使用自定义Kubernetes Cluster(使用minikube
,kubeadm
等)。在这种情况下,没有集成LoadBalancer(与AWS或Google Cloud不同)。使用此默认设置,您只能使用NodePort
或Ingress Controller。使用Ingress Controller,您可以设置一个映射到您的pod的域名。
检查kube-controller日志。我能够通过将clusterID标记设置为我部署集群的ec2实例来解决此问题。
关注@Javier的回答。我决定为我的负载均衡器“修补外部IP”。
http://192.168.99.100:30454
有关这方面的更多信息请参阅karthik在 $ kubectl patch service my-loadbalancer-service-name \
-n lb-service-namespace \
-p '{"spec": {"type": "LoadBalancer", "externalIPs":["192.168.39.25"]}}'
上的帖子
不是最干净的方法。我需要一个临时解决方案。希望这有助于某人。
如果您没有使用GCE或EKS(您使用的是kubeadm
),您可以在服务YAML中添加externalIPs
规范。您可以使用与节点主接口关联的IP,例如eth0
。然后,您可以使用节点的外部IP从外部访问服务。
...
spec:
type: LoadBalancer
externalIPs:
- 192.168.0.10
如果您使用的是Minikube,那就有一个神奇的命令!
$ minikube tunnel
希望有人可以节省几分钟。
我使用kubeadm创建了一个单节点k8s集群。当我尝试使用PortForward和kubectl代理时,它将外部IP显示为待处理。
$ kubectl get svc -n argocd argocd-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server LoadBalancer 10.107.37.153 <pending> 80:30047/TCP,443:31307/TCP 110s
就我而言,我修补了这样的服务:
kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'
在此之后,它开始服务于公共IP
$ kubectl get svc argo-ui -n argo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argo-ui LoadBalancer 10.103.219.8 172.31.71.218 80:30981/TCP 7m50s
使用NodePort:
kubectl运行user-login --replicas = 2 --labels =“run = user-login” - image = kingslayer / team project:version 2 --port = 5000
kubectl公开部署user-login --type = NodePort --name = user-login-service
kubectl描述服务user-login-service(注意端口)
kubectl cluster-info(IP->获取运行master的IP)
您可以通过(IP)访问您的服务:(端口)
同样的问题:
os> kubectl获取svc right-sabertooth-wordpress
名称类型集群-IP外部-IP端口(S) right-sabertooth-wordpress LoadBalancer 10.97.130.7“pending”80:30454 / TCP,443:30427 / TCP
我们> minicube服务列表
|-------------|----------------------------|--------------------------------|
| NAMESPACE | NAME |网址|
|-------------|----------------------------|--------------------------------|
|默认| kubernetes |从节点端口|
|默认| right-sabertooth-mariadb |没有节点端口|
|默认| right-sabertooth-wordpress | http://192.168.99.100:30454 |
| | | http://192.168.99.100:30427 |
|立方体系统|立方体dns |但请注意端口|
| kube系统|分蘖部署|没有节点端口|
|-------------|----------------------------|--------------------------------|
但是,它可以通过qazxsw poi访问。
如果在minikube上运行,如果您没有使用默认值,请不要忘记提及命名空间。
minikube service << service_name >> --url --namespace = << namespace_name >>
删除现有服务并创建相同的新服务解决了我的问题。我的问题是使用Ip I定义的加载平衡,以便外部端点处于挂起状态。当我更改新的负载均衡IP时,它仍然无法正常工作。最后,删除现有服务并创建一个新服务解决了我的问题。