Serwis pozwala na „wypuszczenie” aplikacji na zewnątrz – sprawienie że będzie ona dostępna pod skonfigurowanym adresem IP. Najczęściej serwisy są definiowane na podstawie wcześniej już stworzonych konfiguracji deploymentu.
Podejście imperatywne
Aby stworzyć serwis na podstawie istniejącego już deploymentu, należy użyć następującej komendy:
kubectl expose deployment your-deployment-name --port=8080 --type=LoadBalancer
Polecenie to tworzy serwis na podstawie deploymentu o nazwie your-deployment-name, wystawia aplikację na porcie 8080 i korzysta z LoadBalancera w celu upublicznienia serwisu (LoadBalancer jest to usługa dostarczana poprzez dostarczyciela chmur np. AWS, Azure i to ona de facto steruje cały load balancingiem – do którego podu pójdzie żądanie; niektórzy usługodawcy pozwalają na wymuszenie adresu IP poprzez użycie opcji loadBalancerIP; więcej na temat LoadBalancer można znaleźć tutaj). Inne typy (ClusterIP, NodePort, ExternalName) nie pozwalają na wyjście poza klaster Kubernetesa.
Podejście deklaratywne
Możliwe jest także stworzenie pliku zawierające informacje o serwisie i następnie posłużenie się nim w celu stworzenia serwisu.
Stworzenie pliku konfiguracyjnego
Jest to trochę bardziej skomplikowane niż w ramach podejście imperatywnego. Pełną specyfikację możliwości można znaleźć tutaj. Plik konfiguracyjny musi używać składni YAML. Przykładowa konfiguracja:
apiVersion: v1
kind: Service
metadata:
name: second-service
spec:
selector:
app: second-app
ports:
- protocol: 'TCP'
port: 80
targetPort: 8080
type: LoadBalancer
apiVersion
Określa z jakiej wersji konfiguracji korzystamy. Możliwości konfiguracyjne ewoluują, stąd aby uprościć sprawę kompatybilności wstecznej zastosowane takie rozwiązanie. Więcej na ten temat można przeczytać tutaj.
kind
Tutaj określamy typ konfiguracji. W naszym wypadku jest to service.
metadata
Sekcja pozwalająca na uzupełnienie metadanych serwisu. Obowiązkowym polem jest pole name.
spec
Tutaj definiowane są najważniejsze elementy serwisu takie jak to które pody będą wchodziły w skład serwisu czy też port czy typ serwisu.
selector
Selektor określa, które pody będą zaciągnięte do tego serwisu (patrz konfiguracja deploymentu spec.template.metadata.labels).
ports
Definicja protokołu oraz portów.
type
Typ serwisu, więcej na ten temat znajdziesz tutaj.
Zaaplikowanie konfiguracji
Posiadając już plik konfiguracyjny wystarczy go zaaplikować używają polecenia:
kubectl apply -f your_service_configuration.yaml