如果不指定Service的spec.type的值,创建的Service的类型默认为ClusterIP类型。这种类型的Service只会得到虚拟的IP和端口,只能在Kubernetes集群内部被访问。
如果指定Service的spec.type的值为“NodePort”,创建的Service的类型默认为NodePort类型。这种类型的Service除了会得到虚拟的IP和端口,Kubernetes还会在所有Node节点上为其分配端口。分配的端口的值可以通过spec.ports[*].nodePort指定,或由Knubernetes在配置好的区间里分配(默认为30000-32767)。这种Service即可以从Kubernetes集群通过虚拟IP:端口访问,也可以从集群外部通过Node节点的IP:nodePort访问
如果指定Service的spec.type的值为“LoadBalancer”,创建的Service的类型默认为LoadBalancer类型。这种类型的Service除了会得到虚拟的IP和端口,Kubernetes还会在所有Node节点上为其分配端口,然后为其开通负载均衡。这种Service即可以从Kubernetes集群通过虚拟IP:端口访问,也可以从集群外部通过Node节点的IP:nodePort访问,还可以通过负载均衡的IP访问。
pyxis-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: firmament-pyxis
namespace: sky-firmament
labels:
app: firmament-pyxis
version: v0.3
spec:
replicas: 1
selector:
app: firmament-pyxis
template:
metadata:
labels:
app: firmament-pyxis
version: v0.3
spec:
nodeName: gprsgx11
containers:
- name: firmament-pyxis
image: reg.ai.cbbscloud.com:5000/pyxis:v0.3
imagePullPolicy: Always
env:
- name: KUBERNETES_URL
valueFrom:
configMapKeyRef:
name: config
key: kubernetes.url
resources:
limits:
cpu: 500m
memory: 200Mi
requests:
cpu: 500m
memory: 200Mi
ports:
- containerPort: 8080
volumeMounts:
- name: kubectl-path
mountPath: /usr/bin/kubectl
volumes:
- name: kubectl-path
hostPath:
path: /usr/bin/kubectl
pyxis-service.yaml
apiVersion: v1
kind: Service
metadata:
name: pyxis-firmament-com
namespace: sky-firmament
labels:
app: firmament-pyxis
spec:
selector:
app: firmament-pyxis
ports:
- port: 8081
targetPort: 8080
nodePort: 31081
type: NodePort