我无法卷曲到服务的外部IP。我的Kubernetes集群部署在GKE上。
$ kubectl run kubia-container --image=australia/kubia_py --port=8080 --generator=run/v1
kubectl run --generator=run/v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
replicationcontroller/kubia-container created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubia-container-6b2cs 1/1 Running 0 25s
$ kubectl expose rc kubia-container --type=LoadBalancer --name kubia-http
service/kubia-http exposed
$ kubectl get pods,svc,rc
NAME READY STATUS RESTARTS AGE
pod/kubia-container-6b2cs 1/1 Running 0 93m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 6h28m
service/kubia-http LoadBalancer 10.0.4.238 35.188.42.26 8080:30030/TCP 91m
$ curl 35.188.42.26:8080
curl: (7) Failed to connect to 35.188.42.26 port 8080: Connection refused
发布于 2020-04-16 18:02:41
我试过很多方法来达到你想要的效果。我假设这个图像australia/kubia_py它是你的自定义图像。我认为你不能卷曲这个服务,因为在文件nodeapp.py
中的这个图像中,你已经放入了这样的条目:
server = HTTPServer(('localhost', 8080), GetHandler)
print ("Starting server, use <Ctrl-C> to stop")
server.serve_forever()
此外,如果您检查容器内部的netstat
,您将看到它在127.0.0.1:8080
上进行侦听
# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 1/python3
我认为应该指定0.0.0.0
来监听所有接口,而不是'localhost‘。
我发现只有一种方法可以实现这个replicacontroller应用程序的输出(我建议将来尝试使用deployments )就是使用web-preview。为此,您需要port-forward
您的pod。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubia-container-95rrq 1/1 Running 0 44m
user@cloudshell:~ (project-name)$ kubectl port-forward kubia-container-95rrq 8888:8080
Forwarding from 127.0.0.1:8888 -> 8080
Handling connection for 8888
Handling connection for 8888
端口8888
只是我选择的默认端口之一。您的菜单中有几个。
以及使用WebPreview
(使用cloud shell中的按钮)。能够实现如下输出:
CLIENT VALUES:
client_address=('127.0.0.1', 46696) (127.0.0.1)
command=GET
path=/?authuser=0
real path=/
query=authuser=0
request_version=HTTP/1.1
SERVER VALUES:
server_version=BaseHTTP/0.6
sys_version=Python/3.6.9
protocol_version=HTTP/1.0
host_name=kubia-container-95rrq
host_ip=10.44.1.26
另外,如果你暴露的是replicacontroller
或者deployment
,记住如果你只是设置--port=8080
,它也会自动将--port-target
设置为8080
。如果您正在使用kubectl expose
来使用标志--port=XX
和--target-port=xxxx
,那么最好使用它。
如果你想查看kubia
replicacontroller
和service
,你可以使用this example,如下所示:
$ kubectl apply -f kubia-rc-and-service-v1.yaml
replicationcontroller/kubia-v1 created
service/kubia created
user@cloudshell:~ (your-project)$ kubectl get rc,svc
NAME DESIRED CURRENT READY AGE
replicationcontroller/kubia-v1 3 3 3 40s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.48.1 <none> 443/TCP 8h
service/kubia LoadBalancer 10.0.51.154 35.240.23.237 80:30785/TCP 40s
$ curl 35.240.23.237:80
This is v1 running in pod kubia-v1-zpj6s
您可以在Official GKE docs上找到的另一个公开和访问服务的好例子。
发布于 2020-04-16 21:07:11
尝试使用localhost:30030
,这是向您的主机公开的nodeport。
如果这不起作用,这意味着您的容器没有在8080
中侦听,您可以测试进入pod和curl localhost:8080
。
https://stackoverflow.com/questions/61242293
复制