简介
本文档介绍了如何通过公网访问云容器引擎集群。通过正确配置 Kubernetes API Server 和 Ingress 控制器,您可以安全地从公网访问集群资源。
绑定EIP
登录云容器引擎控制台,单击集群名称进入集群。
在集群信息页中,点击连接信息,点击公网访问,若未绑定eip,点击绑定eip,若未创建eip,则需先创建eip。
绑定完eip后。
在集群信息页中,点击连接信息。
点击公网访问,复制kubeconfig文件内容,将该内容复制到$HOME/.kube/config文件下:
配置 API Server
修改 API Server 配置
编辑 Kubernetes API Server 配置文件,通常位于 /etc/kubernetes/manifests/kube-apiserver.yaml。在 command 部分添加以下参数:
- --advertise-address=<PUBLIC_IP>
- --external-hostname=<PUBLIC_DNS>
替换 <PUBLIC_IP> 为您的公网 IP 地址,替换 <PUBLIC_DNS> 为您的公网 DNS 名称。
重启 API Server
应用配置更改后,Kubelet 会自动重新启动 API Server。您可以通过以下命令检查 API Server 是否正常运行:
kubectl get pods -n kube-system
确保 kube-apiserver Pod 处于 Running 状态。
配置防火墙规则
确保防火墙允许以下端口的入站流量:
6443:Kubernetes API Server
80:HTTP
443:HTTPS
具体的防火墙配置取决于您的云提供商。例如,在 AWS 上,可以通过以下步骤配置安全组:
登录到 AWS 控制台。
导航到 EC2 服务。
选择实例并找到相关的安全组。
编辑安全组的入站规则,添加允许 6443、80 和 443 端口的规则。
配置 Ingress 控制器
安装 Ingress 控制器
如果您尚未安装 Ingress 控制器,可以使用以下命令安装 NGINX Ingress Controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
配置 Ingress 资源
创建一个 Ingress 资源来公开您的服务。示例 Ingress 配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: default
spec:
rules:
- host: <PUBLIC_DNS>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
替换 <PUBLIC_DNS> 为您的公网 DNS 名称,example-service 为您的服务名称。
应用 Ingress 配置:
kubectl apply -f example-ingress.yaml
配置 DNS
将您的公网 DNS 名称指向 Ingress 控制器的外部 IP 地址。可以在您的域名注册商处配置 DNS 记录。例如:
类型:A
名称:<PUBLIC_DNS>
值:Ingress 控制器的外部 IP 地址
验证连接
配置完成后,您可以通过公网访问您的 Kubernetes 集群和服务。例如,在浏览器中访问:
https://<PUBLIC_DNS>
安全注意事项
认证和授权:确保 API Server 启用了适当的认证和授权机制。
网络安全:使用 HTTPS 加密流量,确保数据传输的安全性。
防火墙:仅开放必要的端口,并限制访问来源 IP。
审计日志:启用审计日志,监控和记录访问行为。
常见问题
无法访问 API Server
检查防火墙规则是否正确配置。
确认 API Server 配置中的公网 IP 和 DNS 名称正确无误。
检查 API Server 日志以获取详细错误信息。
无法访问 Ingress 控制器
确认 Ingress 控制器 Pod 处于运行状态。
确认 Ingress 资源配置正确,DNS 名称指向正确的 IP 地址。