无法通过公共IP访问主节点上的服务(但是我可以SSH吗?)

时间:2019-05-24 00:49:12

标签: kubernetes terraform

我一直在玩kubernetes,遇到了一个问题。问题的核心是,虽然我可以通过卷曲localhost来访问主节点上的服务,但尝试通过公用ip和端口访问同一服务的行为在另一台计算机(或Web浏览器)上永久挂起。

我已经使用terraform脚本(以root身份运行)配置了集群:

#!/bin/bash -v

exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>startup_log.out 2>&1

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

cat << EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

apt-get update
apt-get install -y docker-ce
apt-mark hold docker-ce
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
apt-mark hold kubelet kubeadm kubectl

kubeadm init --token=${k8stoken} --pod-network-cidr=10.244.0.0/16

mkdir -p /home/ubuntu/.kube
cp -i /etc/kubernetes/admin.conf /home/ubuntu/.kube/config
chown -R $(id -u ubuntu):$(id -g ubuntu) /home/ubuntu/.kube/

usermod -aG docker ubuntu

echo "net.bridge.bridge-nf-call-iptables=1" | tee -a /etc/sysctl.conf
sysctl -p

runuser -l ubuntu -c '\
   kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
'

之后,我通过SSH连接到主节点(运行正常)并运行:

$ git clone https://github.com/linuxacademy/robot-shop.git
$ kubectl create namespace robot-shop
$ kubectl -n robot-shop create -f ~/robot-shop/K8s/descriptors/
$ ubuntu@ip-10-0-100-167:~$ kubectl -n robot-shop get svc
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
cart        ClusterIP   10.105.152.135   <none>        8080/TCP             15s
catalogue   ClusterIP   10.97.111.197    <none>        8080/TCP             15s
dispatch    ClusterIP   None             <none>        55555/TCP            15s
mongodb     ClusterIP   10.107.178.183   <none>        27017/TCP            15s
mysql       ClusterIP   10.110.254.52    <none>        3306/TCP             15s
payment     ClusterIP   10.99.195.138    <none>        8080/TCP             15s
rabbitmq    ClusterIP   10.99.70.232     <none>        5672/TCP,15672/TCP   15s
ratings     ClusterIP   10.98.80.21      <none>        80/TCP               15s
redis       ClusterIP   10.101.232.84    <none>        6379/TCP             15s
shipping    ClusterIP   10.106.246.97    <none>        8080/TCP             15s
user        ClusterIP   10.109.120.146   <none>        8080/TCP             15s
web         NodePort    10.97.162.113    <none>        8080:30080/TCP       15s

服务似乎可以正常启动,但是我无法从外部访问此主机上的任何内容。我尝试遵循this debugging guide,并在输入时发现了差异:

$ iptables-save | grep 

我什么也没得到。但是该文档未对修复提出建议。有人看过这个问题吗?我担心我的配置文件有问题,但是我不知道是什么!

1 个答案:

答案 0 :(得分:0)

在特定安全组中为相关主节点实例启用了适当的服务端口之后,已解决了注释问题中的@Ashworth。