我试图在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仪表板上也在终端上显示为待定。
如果它是您的私有k8s集群,MetalLB将是一个更好的选择。以下是步骤。
步骤1:在集群中安装MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml
# On first install only
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
步骤2:使用configmap配置它
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 172.42.42.100-172.42.42.105 #Update this with your Nodes IP range
步骤3:创建您的服务以获得外部IP(可能是私有IP)。
FYR:
安装MetalLB前:
安装MetalLB后:
我在AWS EKS上也有同样的问题
问题是这样解决的:
Amazon虚拟私有云(Amazon VPC)的正确标记
子网
所需的AWS IAM (Identity and Access Management)权限
一个有效的Kubernetes服务定义Load
有足够的空闲IP地址
在子网上
需要确保以下标签
关键:kubernetes.io /集群/ yourEKSClusterName
价值:分享
关键:kubernetes.io /角色/ elb
值:1
关键:kubernetes.io /角色/ internal-elb
值:1
供参考,也确保sts是为您正在工作的区域启用sts设置可以在用户,区域设置下找到。