我的网站托管在DigitalOcean提供的Kubernetes集群上,我遇到超时问题。
u@macbook$ curl -L fork.example.com
curl: (7) Failed to connect to fork.example.com port 80: Operation timed out
我已经尝试了Debug Services页上列出的所有内容。我使用名为df-stats-site
的k8s服务。
u@pod$ nslookup df-stats-site
Server: 10.245.0.10
Address: 10.245.0.10#53
Name: df-stats-site.deepfork.svc.cluster.local
Address: 10.245.16.96
当我从节点执行此操作时,它会提供相同的输出:
u@node$ nslookup df-stats-site.deepfork.svc.cluster.local 10.245.0.10
Server: 10.245.0.10
Address: 10.245.0.10#53
Name: df-stats-site.deepfork.svc.cluster.local
Address: 10.245.16.96
在页面的 服务是否通过IP工作吗? 的帮助下,我尝试了以下命令并获得了预期的输出。
u@node$ curl 10.245.16.96
*correct response*
这应该意味着DNS和服务一切正常。我确认kube-proxy
正在使用以下命令运行:
u@node$ ps auxw | grep kube-proxy
root 4194 0.4 0.1 101864 17696 ? Sl Jul04 13:56 /hyperkube proxy --config=...
但是我对iptables
规则有误:
u@node$ iptables-save | grep df-stats-site
(unfortunately, I was not able to copy the output from node, see the screenshot below)
建议在kube-proxy
标志设置为4的情况下重新启动-v
,但我不知道如何使用DigitalOcean提供的群集来完成它。
这是我使用的配置:
apiVersion: v1
kind: Service
metadata:
name: df-stats-site
spec:
ports:
- port: 80
targetPort: 8002
selector:
app: df-stats-site
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: df-stats-site
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- fork.example.com
secretName: letsencrypt-prod
rules:
- host: fork.example.com
http:
paths:
- backend:
serviceName: df-stats-site
servicePort: 80
此外,我在this answer的帮助下设置了NGINX入口控制器。
我必须注意,它之前运行良好。我不确定是什么原因造成的,但是重新启动群集会很好,尽管我不知道如何删除所有资源。
答案 0 :(得分:0)
ClusterIP服务只能从群集内访问。如果要从群集外部访问它,则需要将其配置为NodePort or LoadBalancer。
如果只是尝试在本地进行测试,则可以使用kubectl port-forward将本地计算机上的端口转发到远程群集上的ClusterIP服务。这是一个从映像创建部署的示例,将其作为ClusterIP服务公开,然后通过kubectl port-forward访问它:
$ kubectl run --image=rancher/hello-world hello-world --replicas 2
$ kubectl expose deployment hello-world --type=ClusterIP --port=8080 --target-port=80
$ kubectl port-forward svc/hello-world 8080:8080
现在可以从我的本地计算机通过http://127.0.0.1:8080
访问此服务。答案 1 :(得分:0)
对我来说,解决方案是在防火墙中添加HTTP和HTTPS入站规则(默认情况下,这些规则会丢失)。
对于DigitalOcean提供的Kubernetes集群,可以在https://cloud.digitalocean.com/networking/firewalls/上打开它。
更新:确保创建新的防火墙记录,而不是编辑现有的记录。否则,由于DigitalOcean k8s将规则集保留在防火墙中,因此您的规则将在几个小时/天之内自动删除。