我试图在kubernetes上部署nginx, kubernetes版本是v1.5.2,
我已经部署了nginx的3个副本,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仪表板上也在终端上显示为待定。
下面是@Javier的回答。我已经决定为我的负载均衡器“修补外部IP”。
$ kubectl patch service my-loadbalancer-service-name \
-n lb-service-namespace \
-p '{"spec": {"type": "LoadBalancer", "externalIPs":["192.168.39.25"]}}'
这将用一个新的补丁IP地址替换那个“pending”,你可以为你的集群使用。
了解更多。请参阅karthik关于Minikube支持LoadBalancer的帖子
这么做可不干净。我需要一个临时的解决方案。希望这能帮助到一些人。
在Kubernetes中,将运行在一组Pods上的应用程序公开为网络服务的一般方法称为service。Kubernetes中有四种类型的服务。
ClusterIP
服务只能从集群内访问。
NodePort
您可以使用NodeIP:NodePort.default节点端口范围是30000-32767从集群外部与服务通信,在创建集群时可以通过define——Service -node-port-range来更改这个范围。
loadbalance
使用云提供商的负载平衡器在外部公开服务。
ExternalName
通过返回带有值的CNAME记录,将服务映射到externalName字段的内容(例如,foo.bar.example.com)。没有设置任何类型的代理。
只有LoadBalancer为External-IP列提供值。只有当Kubernetes集群能够为特定的服务分配IP地址时,它才能工作。您可以使用metalLB负载均衡器为您的负载均衡器服务提供ip。
我希望你的疑虑能消失。