我用kubernetes 1.3.0设置kubernetes环境,并在同一台主机上运行master和node,我运行一个带有一个RC的tomcat web应用程序,一个带有docker的服务,一切运行正常,我可以通过内部网络访问服务使用curl命令,但是当我尝试使用公共IP从Internet访问服务时,它是失败的。
RC配置为:
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: "mysql"
- name: MYSQL_SERVICE_PORT
value: '3306'
服务配置为:
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
如您所见,服务侦听30001端口,当端口监听Kubernetes服务时,它无法通过Internet访问,但是当我使用时
nc -l 30001
命令在同一主机上,可以通过Internet访问,这意味着网络配置在系统层就可以了。
对于主机的iptables设置,我接受所有连接,但问题仍然存在。
那为什么我可以用kubernetes服务访问它?有没有我错过的配置?
答案 0 :(得分:0)
要使用主机网络公开kubernetes服务,您可以使用Ingress规则。
请参阅:https://kubernetes.io/docs/concepts/services-networking/ingress/
在您的情况下,入口规则如下。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
rules:
- host: test.example.com
http:
paths:
- backend:
serviceName: myweb
servicePort: 30001
path: /